Java 如何在单词之间添加分隔符?

Java 如何在单词之间添加分隔符?,java,bluej,Java,Bluej,我正在为我的任务编写一个刽子手程序,我遇到了一个小问题。 在我的程序中,为了分隔单词,我使用了“|”符号。 这是一个值得猜测的词: U N I T E D | S T A T E S | O F | A M E R I C A 我有一个StringBuffer变量,它显示破折号的数量 这里, 我尝试使用以下代码插入分隔符“|” if(guessword.indexOf('|') == -1) System.out.print(" "); else guessit.setChar

我正在为我的任务编写一个刽子手程序,我遇到了一个小问题。 在我的程序中,为了分隔单词,我使用了“|”符号。 这是一个值得猜测的词:

U N I T E D | S T A T E S | O F | A M E R I C A
我有一个StringBuffer变量,它显示破折号的数量 这里,

我尝试使用以下代码插入分隔符“|”

if(guessword.indexOf('|') == -1)
    System.out.print(" ");
else
    guessit.setCharAt(guessword.indexOf('|'),'|');
我知道它错了,它只插入了一个分隔符。 你能帮我把分离器插到正确的位置吗? 您还可以尝试删除System.out.print(“”);因为它不必要地留下空间。 我可以休息一下吗;相反 对于以上示例,我得到的显示为

_ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
我真的想要

_ _ _ _ _ _ | _ _ _ _ _ _ | _ _ | _ _ _ _ _ _ _
我的主要方法如下

public static void main()throws IOException
{
    Hangman obj = new Hangman();
    InputStreamReader isr = new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader(isr);
    PrintWriter p = new PrintWriter(System.out,true);

    p.println("Lets play HANGMAN");
    p.println();
    p.println("Enter your choice according to the following options.\n
               NOTE: Words are related to the topics given below.\n
               1. Sports\n2. Movies\n3. Computer\n4. Food\n5. Countries");
    p.println();
    int choice = Integer.parseInt(br.readLine());
    obj.clearScreen();
    String bothwordandclue[] = new String[2];

    if(choice == 1)
        bothwordandclue = obj.Sports();
    else if(choice == 2)
        bothwordandclue = obj.Movies();
    else if(choice == 3)
        bothwordandclue = obj.Computers();
    else if(choice == 4)
        bothwordandclue = obj.Food();
    else if(choice == 5)
        bothwordandclue = obj.Countries();
    else
        p.println("Wrong choice");

    int counter = 6;
    String guessword = bothwordandclue[0];
    String wordclue = bothwordandclue[1];

    int lengthofword = (int)(Math.round(((double)guessword.length()/2)));
    int checkguess = 0;
    String a;
    StringBuffer guessit = new StringBuffer();

    for (int i = 0;i < lengthofword; i++)
        guessit = guessit.append("_ ");

    guessit.delete((2 * lengthofword)-1,(2 * lengthofword));

    if(guessword.indexOf('|') == -1)
        System.out.print(" ");
    else
        guessit.setCharAt(guessword.indexOf('|'),'|');

    p.println(guessit);
    do
    {
        p.println();
        p.println("Enter your guess letter in capitals");
        String guessletter = br.readLine();
        obj.clearScreen();

        for(int i = 0;i<lengthofword;i++)
        {
            if(guessletter.charAt(0) == guessword.charAt(2*i))
            {
                guessit.setCharAt(2*i,guessletter.charAt(0));
                checkguess=1;
            }                
        }
        if(checkguess == 1)
        {
            p.println("Correct Guess");
            p.println(guessit);
        }
        else
        {
            counter--;
            p.println("Wrong guess. You have " + counter + 
                                    " incorrect guesses left");
            p.println(guessit);
        }
        checkguess = 0;
        a = guessit.toString();
        if(a.equals(guessword))
        {
            p.println("You guessed the word!!!!!");
            counter=0;
        }        
    }while(counter>0);
}
publicstaticvoidmain()引发IOException
{
刽子手obj=新刽子手();
InputStreamReader isr=新的InputStreamReader(System.in);
BufferedReader br=新的BufferedReader(isr);
PrintWriter p=新的PrintWriter(System.out,true);
p、 println(“让我们扮演刽子手”);
p、 println();
p、 println(“根据以下选项输入您的选择。\n
注意:单词与下面给出的主题相关。\n
1.体育\n2.电影\n3.计算机\n4.食品\n5.国家);
p、 println();
int choice=Integer.parseInt(br.readLine());
obj.clearScreen();
字符串bothwordandclue[]=新字符串[2];
如果(选项==1)
bothwordandclue=obj.Sports();
else if(选项==2)
bothwordclue=obj.Movies();
else if(选项==3)
bothwordandclue=obj.Computers();
else if(选项==4)
bothwordandclue=obj.Food();
else if(选项==5)
bothwordandclue=obj.Countries();
其他的
p、 println(“错误选择”);
int计数器=6;
字符串猜测词=bothwordandclue[0];
字符串wordclue=bothwordandclue[1];
int lengthofword=(int)(Math.round((double)guessword.length()/2));
int checkguess=0;
字符串a;
StringBuffer guessit=新的StringBuffer();
对于(int i=0;i
请参见

如果你不知道正则表达式:


问题是
setCharAt
indexOf
只适用于一个索引,这就是为什么它只替换第一个|。您必须多次迭代
猜测词。您可以使用一些Java的其他内置字符串函数,也可以使用简单的for循环,即

for(int i = 0; i < guessword.length(); i++){
    if(guessword.charAt(i) == '|')
        guessit.setCharAt(i, '|');
}
for(int i=0;i
您只能使用
indexOf
进行搜索。您只需要使用该方法的另一个版本,它从哪里开始搜索。请参阅此处所需的

int index = guessword.indexOf("|");
while(index >= 0) {
   guessIt.setCharAt(index, '|')

   // Start searching for next "|" after this index
   index = guessword.indexOf("|", index+1));  
}

效率更高,但我不喜欢告诉初学者学习正则表达式的想法。这里不需要正则表达式。你认为为什么正则表达式可以工作?我们正在基于其他正则表达式替换字符串中的字符string@PWhite如果是为了一个任务,我想他总有一天会了解regex的,那为什么今天不行呢?@Rohit Jain I't anwser f或者他精确的用例,但是建议学习,这样可以简化他的算法,也许会给他一个更好的分数;)谢谢你的帖子。我要学习所有这些复杂的东西还有很长的路要走。我大约一年前在学校刚开始学Java,对此一无所知,但我肯定会学习NupNote,因为它解决了问题比我的效率更高,但对初学者来说没有那么明显。可能包括到,int)的链接,非常感谢。这非常有效地解决了问题。@user1772079。不客气:)。您需要单击答案旁边的箭头,将此答案标记为已接受。谢谢您的帖子。在发布问题a之前,我已经尝试过了它甚至没有在单词之间加上一个分隔符:D
int index = guessword.indexOf("|");
while(index >= 0) {
   guessIt.setCharAt(index, '|')

   // Start searching for next "|" after this index
   index = guessword.indexOf("|", index+1));  
}