Michael
Michael

Reputation: 61

Fill in the blank

I'm having a problem replacing my String.

This is the Question class method.

public class Question
{
private String text;
private String answer;

/**
Constructs a question with empty question and answer.
 */
public Question(String qText) 
{
    text = qText;
    answer = "";
}

/**
Sets the answer for this question.
@param correctResponse the answer
 */
public void setAnswer(String correctResponse)
{
    answer = correctResponse;
}

/**
Checks a given response for correctness.
@param response the response to check
@return true if the response was correct, false otherwise
 */
public boolean checkAnswer(String response)
{
    return response.equals(answer);
}

/**
Displays this question.
 */
public void display()
{
    System.out.println(text);
}
}

And this is my method

This is my blankQuestions class

import java.util.ArrayList;  


public class BlankQuestion extends Question {  

public BlankQuestion(String qText) {   
    return qText.replaceAll("_+\\d+_+", "_____");


    String tempSplit[] = questionText.split("_");  
    setAnswer(tempSplit[1]);  

}  
public void setAnswer(String correctChoice){  
    super.setAnswer( correctChoice );  

}  

@Override  
public boolean checkAnswer (String response){  
    return super.checkAnswer(response);  

}  

public String toString(){  
    return super.toString();  
}  


}  

This is my main class

import java.util.Scanner;  

public class QuestionDemo  
{  
public static void main(String[] args)  
{  
  Question[] quiz = new Question[2];  

  BlankQuestion question0 = new BlankQuestion(  
     "2 + 2 = _4_");  
  quiz[0] = question0;  

  BlankQuestion question1 = new BlankQuestion(  
     "The color of the sky is _blue_.");  
  quiz[1] = question1;  

  Scanner in = new Scanner(System.in);  
  for (Question q : quiz)  
  {  
     q.display();  
     System.out.println("Your answer: ");  
     String response = in.nextLine();  
     System.out.println(q.checkAnswer(response));  
  }  
}  
}  

From what I understand, I'm replace [underscore]4[underscore] with 5x[underscore], this is similar to filling in the blank, I store the 4. and replace the part of the string with _____. Unfortado, that is my result. I think my logic is right, but I have no idea why my return is not what I expected.

Upvotes: 0

Views: 4093

Answers (1)

Blender
Blender

Reputation: 298492

Just do it all at once:

return qText.replaceAll("_+\\d+_+", "_____");

It replaces one or more underscores followed by one or more digits followed by one or more underscores with five underscores.

Upvotes: 2

Related Questions