Java - 获取输入字符串的各个子字符串

时间:2014-04-05 21:27:57

标签: java substring

我正在尝试使用空格" "来分隔用户输入的字符串中的单词。无论输入的字符串如何,空格都会分隔每个单词。除此之外,我不能使用split(),因为这是我迄今为止在网上找到的最常见的解决方案。只允许使用substring()

在我失败的尝试中,我只能获得第一个输入的单词(例如“随机”),但不能分开第二个和第三个单词(例如“访问记忆”)。我不打算发布我失败的尝试,但我要求的代码可以帮助我识别每个单词,而不是打印每个单词?

例如:x = foo.substring(1, firstWord);

P.S。我知道这用于创建首字母缩略词,我可以做那部分,只需要识别每个子串。

public class ThreeLetterAcronym {
    public static void main(String[] args) {
        while (firstWord < wordsInput.length()) {
            if (wordsInput.charAt(firstWord) == ' ') {
                first = wordsInput.substring(0,firstWord);
                second = wordsInput.substring(firstWord + 1, wordsInput.length());
                // I know that this is the spot where the last two words are
                // displayed in the output, this is the closest I have been to
                // displaying anything relevant.
                firstWord = wordsInput.length();
            }

            ++firstWord;
        }

        JOptionPane.showMessageDialog(null, "Original phrase was: " 
            + initialInput + "\nThree letter acronym is: " + first + second);
    }
}

4 个答案:

答案 0 :(得分:2)

   String tmp = wordsInput.trim();

   int spaceIndex = tmp.indexOf(" ");
   first = tmp.substring(0,spaceIndex);
   tmp = tmp.substring(spaceIndex+1);
   tmp = tmp.trim();

   spaceIndex = tmp.indexOf(" ");
   second = tmp.substring(0, spaceIndex);
   tmp = tmp.trim();

   third = tmp.substring(spaceIndex+1);

您可以使用循环来改进代码。我希望这会有所帮助。

答案 1 :(得分:1)

如果你可以使用indexof(“”)这将是一个整洁的方式来遍历字符串,直到indexOf返回-1和子串的结果。这将是递归函数的一个很好的候选者。

findStrings(String input, ArrayList<String> stringList){
    if(input.indexOf(" ") < 0)
        return;
    stringList.add(input.subString(0,input.indexOf(" "))
    input = input.subString(input.indexOf(" "));
    return findString(input, stringList);

}

这样的事情。在一个字符串索引上模拟一个和类似的东西,但我会让你弄明白。

答案 2 :(得分:1)

这里是您问题的直接答案,尽管Dylan提供的递归更有效,以下将帮助您了解正在发生的事情

public static void main(String[] args) {
    String str = "hi hello how are you";
    List<String> wordList = new ArrayList<String>();
    int index = 0;
    boolean done = false;
    index = str.indexOf(" ");
    while(!done){
        String newStr = null;
        if(index == -1){
            newStr = str;
        }else{
            newStr = str.substring(0,index);
        }
        wordList.add(newStr);
        if(index == -1){
            str = "";
        }else{
            str = str.substring(index).trim();
        }
        if(!(str.length() > 0)){
            done = true;
        }else{
            index = str.indexOf(" ");
        }
    }
    for(String string : wordList){
        System.out.println(string);
    }

}

答案 3 :(得分:0)

您是否考虑过使用Scanner类,可以对其进行设置,使其使用指定的分隔符。看看Oricals网站http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html 本网站应向您展示您可以使用的所有扫描仪方法,以及实施和设置此类