0

我有一个非常简单的问题,事实上我有点沮丧,因为我无法自己解决这个问题,但这里是:

strBuffer += arg.charAt( i );

通过这一行,我试图解析一个值并将其逐个字符地添加到新字符串中。我这样做是为了将一个长字符串分成一个较小的字符串数组。

例如,这个字符串

-time delayed -run auto -mode go_n_run

会变成这个数组

strBuffer [0] = -time 
strBuffer [1] = delayed 
strBuffer [2] = -run 
strBuffer [3] = auto 
strBuffer [4] = -mode 
strBuffer [5] = go_n_run

所以带有'+='的代码行不起作用,我的strBuffer中没有任何东西。所以我尝试了一些在论坛上发现的更“复杂”的东西:

strBuffer.concat( new String( new char[]{arg.charAt( i )} ) );

但同样的结果,strBuffer 中没有放入任何内容,

所以,任何提示将不胜感激

谢谢

编辑:这是完整的方法

String[] args = new String[2 * ARG_LIMIT];
        int index = 0;

        for( int i = 0; i < arg.length(); i++ )
        {
            String strBuffer = new String();

            if( arg.charAt( i ) != ' ' )
            {   

                            // The two methods I've tried
                strBuffer.concat( new String( new char[]{arg.charAt( i )} ) );

                strBuffer += arg.charAt( i );

            }
            else if( arg.charAt( i ) == ' ' )
            {
                args[index] = strBuffer;
                index++;
                strBuffer = "";
            }
        }
4

4 回答 4

6

我将假设这strBuffer是 java 的一个实例StringBuffer;如果是这样 - 你应该使用strBuffer.append().

但是有一种更简单的方法可以做你想做的事情:

String[] strBuff = arg.split(" "); //按空格分割

于 2012-05-17T14:07:14.007 回答
1

您应该使用 StringTokenizer。这是代码:

// the first parameter is the string to be parsed, the second parameter is the delimiters
StringTokenizer st = new StringTokenizer("-time delayed -run auto -mode go_n_run", " ");
while (st.hasMoreTokens()) {
    String s = st.nextToken();
    // append s to your strBuffer
    // ...
}
于 2012-05-17T14:15:22.440 回答
1

看起来你正在尝试重写String.split()

更具体地说,您正在以艰难的方式做到这一点:

String[] args = arg.split(" ",2*ARG_LIMIT);

您尝试的方法无效,因为 strBuffer 无法生存到 for 循环的下一次迭代。这段代码可以工作:

    String[] args = new String[2 * ARG_LIMIT];

    int index = 0;
    String strBuffer = new String();

    for( int i = 0; i < arg.length(); i++ )
    {

        if( arg.charAt( i ) != ' ' )
        {   

            strBuffer += arg.charAt( i );

        }
        else if( arg.charAt( i ) == ' ' )
        {
            args[index] = strBuffer;
            index++;
            strBuffer = "";
        }
    }
于 2012-05-17T14:20:34.847 回答
0

试着打印出你从那行最后得到的字符本身。如果你没有得到任何字符,那么你显然没有得到你在参数数组中寻找的东西。

于 2012-05-17T14:08:07.863 回答