拆分字符串并使用Java中的随机顺序连接部件

时间:2014-02-19 19:07:41

标签: java string exception

嗨,伙计们和ty阅读我的问题。我想写一个程序,它必须读取一个字符串并拆分它的单词并再次以随机顺序连接它们。我写到目前为止:

package read.java;
import java.io.*;       
public class ReadJava {
    public static int count;
    public static String[] stringsplit(String S)
    {
        count=0;
        String[] strings=new String[10];
        if (S.isEmpty())
            return strings;
        char start=0;
        while(true)
        {
            if(S.charAt(start)!=' ')
            {
                strings[count]+=S.charAt(start);
            }
            else
            {
                if(S.charAt(start)==' '&&S.charAt(start-1)!=' ')
                {
                    count++;
                }
                if(start==S.length())
                {
                    count++;
                    break;
                }
            }
           start++;

        }

        return strings;
    }

    public static String stringjoin(String[] words)
    {
        int [] wordnum= new int [count];
        for(int i=0;i<count;i++)
        {
            wordnum[i]=i;
        }
        String newS = new String();
        while (count!=0)
        {
            int randnum;
            randnum = (int)Math.random()%count;
            newS+=words[randnum];
            for(int i=randnum;i<count-2;i++)
            {
                wordnum[i]=wordnum[i+1];
            }
            count--;
        }
        return newS;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader bfreader =new BufferedReader(new InputStreamReader(System.in));
        String S = new String();
        S=bfreader.readLine();
        String[] strings=new String[10];
        strings=stringsplit(S);
        S=stringjoin(strings);
        System.out.println(S);
    }
}

但是当我编译并输入任何句子时,它会引发异常:

StringIndexOutOfBoundsException在这一行:

S.charAt(start)!=' '

我是Java的新手,我对错误没有任何想法。


该错误由您的帮助修复,但仍然是错误的。我在stringsplit中解决了这个问题:

while(start < S.length())

但它打印“nullThisnullisnullanulltest”为“这是一个测试” 我的stringjoin方法错了吗?!

3 个答案:

答案 0 :(得分:2)

您应该更改while条件:

while (start < S.length())

因为你可以达到的字符串的最大索引是(字符串的长度-1,从零开始的索引)

P.S。您可以从拆分功能中删除以下内容,它将永远无法访问:

if(start==S.length())
    {
        count++;
        break;
    }

P.P.S。您在输出处获得“null”,因为您使用“null”值初始化数组。要解决此问题,请在数组init Arrays.fill(strings,"")之后添加以下内容。因此,stringsplit函数开头的正确代码将是这样的:

count=0;
String[] strings=new String[S.length()]; //we don't know the number of words we get, but this number definitely no more that length of incoming string
Arrays.fill(strings, "");
if (S.isEmpty()){
     ....

答案 1 :(得分:1)

越界异常是因为您试图访问其范围之外的字符串索引(因为String本质上是一个字符数组)。

另一方面,我可以推荐:

String orig = "Some string with spaces";
String[] split = orig.split(" ");

答案 2 :(得分:0)

start最终等于字符串的长度,但你必须记住,字符串的长度比结束元素大1(因为String是零基于数组)。

使while循环中的条件沿着while(start < S.length)

的行