首页 > 解决方案 > 从字符串返回单个单词的方法

问题描述

正如我在标题中提到的,我想在 java 中创建一个方法,从字符串中找到每个单词并将其打印出来。

这就是它(更多更少)的样子:

public int findFirstLetter(int pos, String text)
{
    while (pos<text.length())
    {
        if (Character.isLetter(text.charAt(pos))==true&&(pos == 0||Character.isLetter(text.charAt(pos-1))==false)){return pos;}
        pos++;
    }
    return -1;
}
public int findLastLetter(int pos, String text)
{
    while (pos<text.length()){
        if (Character.isLetter(text.charAt(pos))==true&&(pos+2>text.length()||Character.isLetter(text.charAt(pos+1))==false)){return pos;}
        pos++;
        if (pos == -1){break;};    
    }
    return -1;
}
public void testString (String text)
{
    int first = findFirstLetter(0,text);
    int last = findLastLetter(0,text);
    String word = "";
    int startWord = 0;
    int i = 0;
    while (first!=-1)
    {
        word = text.substring(first, last+1);
        System.out.println("word: "+word);
        startWord = text.indexOf(word)+1;
        first = findFirstLetter(startWord,text);
        if(first == -1){break;}
        last = findLastLetter(first,text);
    }

当我提供一些字符串作为此方法的输入时,循环开始从中间重复并且没有到达结尾。例如,在最后的短语中,该方法一遍又一遍地重复“循环是”。有人可以给我一些建议以找出问题所在吗?

标签: javastring

解决方案


正如@Tim Biegeleisen 在其评论中所说,您可以使用 split 来获取单词,将它们放入一个数组并循环它以打印它们。请注意,提供了两个选项,您应该选择其中之一。如果您正在学习 Java,则第二个选项更具可读性和可理解性。

public void printWords(String s) {

    String [] words = s.split("\\s+"); //Option 1: Tim Biegelsman regex
    String [] words = s.split(" "); //Option 2: if the words are separated by blanks
    for(String word : words) {
        System.out.println(word);
    }
}

另请注意,您可以通过这种方式保存一行代码:

public void printWords(String s) {
    for(String word : s.split(" ")) {
        System.out.println(word);
    }
}

推荐阅读