7

我有一个由空格分隔的几个单词的字符串,例如“firstword second third”和一个ArrayList。我想将字符串分成几部分,并将“部分”字符串添加到 ArrayList。

例如,“firstword second third”可以拆分为三个单独的字符串,因此 ArrayList 将有 3 个元素;"1 2 3 4" 可以拆分为 4 个字符串,在 ArrayList 的 4 个元素中。请看下面的代码:

public void separateAndAdd(String notseparated) {
    for(int i=0;i<canBeSepartedinto(notseparated);i++{
    //what should i put here in order to split the string via spaces?
        thearray.add(separatedstring);
    }
}

public int canBeSeparatedinto(String string)
    //what do i put here to find out the amount of spaces inside the string? 
    return ....
}

如果您不明白我的意思,请发表评论,或者我应该修复这篇文章中的一些错误。谢谢你的时间!

4

7 回答 7

13

您可以使用以下方法在空格处拆分字符串split()

String[] parts = inputString.split(" ");

然后遍历数组并将各个部分(如果!"".equals(parts[i])添加到列表中。

于 2012-08-30T15:36:39.710 回答
5

如果要在一个空间上拆分,可以使用.split(" ");. 如果要连续拆分所有空格,请使用.split(" +");.

考虑以下示例:

class SplitTest {
    public static void main(String...args) {
        String s = "This is a  test"; // note two spaces between 'a' and 'test'
        String[] a = s.split(" ");
        String[] b = s.split(" +");
        System.out.println("a: " + a.length);
        for(int i = 0; i < a.length; i++) {
            System.out.println("i " + a[i]);
        }
        System.out.println("b: " + b.length);
        for(int i = 0; i < b.length; i++) {
            System.out.println("i " + b[i]);
        }
    }
}

如果您担心非标准空格,可以使用"\\s+"代替" +",因为"\\s"将捕获任何空白,而不仅仅是“空格字符”。

因此,您的单独和添加方法变为:

void separateAndAdd(String raw) {
    String[] tokens = raw.split("\\s+");
    theArray.ensureCapacity(theArray.size() + tokens.length); // prevent unnecessary resizes
    for(String s : tokens) {
        theArray.add(s);
    }

}

这是一个更完整的示例 - 请注意,separateAndAdd我在测试期间发现的方法有一个小的修改。

import java.util.*;
class SplitTest {
    public static void main(String...args) {
        SplitTest st = new SplitTest();
        st.separateAndAdd("This is a test");
        st.separateAndAdd("of the emergency");
        st.separateAndAdd("");
        st.separateAndAdd("broadcast system.");

        System.out.println(st);
    }

    ArrayList<String> theArray = new ArrayList<String>();

    void separateAndAdd(String raw) {
        String[] tokens = raw.split("\\s+");
        theArray.ensureCapacity(theArray.size() + tokens.length); // prevent unnecessary resizes
        for(String s : tokens) {
            if(!s.isEmpty()) theArray.add(s);
        }
    }

    public String toString() {
        StringBuilder sb = new StringBuilder();
        for(String s : theArray)
            sb.append(s).append(" ");
        return sb.toString().trim();
    }
}
于 2012-08-30T15:42:13.253 回答
2

我建议使用

apache.commons.lang.StringUtils 库。

它是最简单的,并且涵盖了您可以用最少的代码拆分字符串的所有不同条件。

这是拆分方法的参考: 拆分方法

您还可以在同一链接上参考可用于拆分方法的其他选项。

于 2012-08-30T16:15:30.767 回答
2

做这个:

thearray = new ArrayList<String>(Arrays.asList(notseparated.split(" ")));

或者如果thearray已经实例化

thearray.addAll(Arrays.asList(notseparated.split(" ")));
于 2012-08-30T15:37:34.583 回答
2

如果您想将字符串拆分为不同的部分,例如在这里,我将向您展示如何在14-03-2016日、月和年中拆分此字符串。

 String[] parts = myDate.split("-");
           day=parts[0];
           month=parts[1];
           year=parts[2];
于 2016-03-14T06:39:08.507 回答
1

你可以用.split()试试这个

String[] words= inputString.split("\\s");
于 2012-08-30T15:43:45.960 回答
0

试试这个:字符串到 2 部分:

public String[] get(String s){
    int l = s.length();
    int t = l / 2;
    String first = "";
    String sec = "";
    for(int i =0; i<l; i++){
        if(i < t){
            first += s.charAt(i);
        }else{
            sec += s.charAt(i);
        }
    }
    String[] result = {first, sec};
    return result;
}

例子:

String s = "HelloWorld";
String[] res = get(s);
System.out.println(res[0]+" "+res[1])

输出:

Hello World
于 2018-05-21T05:27:36.170 回答