明智地屠杀一个字符串

时间:2014-10-08 19:35:29

标签: java string indexoutofboundsexception

我试图将长字符串分隔成每个单词并在Java中按顺序打印它们但它会引发异常StringIndexOutOfBounds。继承代码,任何输入都受到高度赞赏:

public class SpellingChecker {
public static void test(String str) {
    int i=0,j=0,n=str.length();
    String temp="";
    do{
        for(i=j;str.charAt(i)!=' ';i++)
            temp+=str.charAt(i);
        temp+='\0';
        System.out.println(temp);
        temp="";
        j=i+1;
    }while(j<n);
}
public static void main(String[] args) {
    java.util.Scanner input = new java.util.Scanner(System.in);
    System.out.print("Enter string for which you want to check spelling : ");
    String strng=input.next();
    test(strng);
    }
}

4 个答案:

答案 0 :(得分:2)

这将做你想要的:

String[] words = str.split("\\s+");
StringBuilder temp = new StringBuilder();
for (String word : words)
    temp.append(word).append("\0");

答案 1 :(得分:2)

如果我理解了您的问题,您可以重写test(String)以使用String.split(String)之类的内容,

public static void test(String str) {
    String[] words = str.split("\\s+");
    for (String word : words) {
        System.out.println(word);
    }
}

答案 2 :(得分:2)

您正在使用next()代替nextLine()来扫描您的句子。所以你只会得到第一个单词而不是所有的单词..

所以将其改为

String strng = input.nextLine();

接下来,您的test()方法应该是模板

public static void test(String str) {
    String[] words = str.split("\\s+");
    for(String word: words) {
        System.out.println(word);
        //Here decide what you want to do with each word
    }
}

答案 3 :(得分:1)

for(i=j;str.charAt(i)!=' ';i++)
temp+=str.charAt(i);

我认为如果字符串中没有任何空格,则超出范围