【问题标题】:How can I split a string in to multiple parts?如何将字符串拆分为多个部分?
【发布时间】:2012-08-25 09:30:29
【问题描述】:

我有一个由空格分隔的几个单词的字符串,例如“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 ....
}

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

【问题讨论】:

    标签: java arrays string arraylist split


    【解决方案1】:

    你可以使用split()在空格处分割字符串:

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

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

    【讨论】:

    • 为什么使用Integer.parseInt(parts[i]);? OP 没有要求将拆分的字符串转换为整数。
    【解决方案2】:

    如果你想在一个空格上分割,你可以使用.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();
        }
    }
    

    【讨论】:

    • 再次阅读这部分“在 ArrayList 中添加了 4 次。”
    • 他希望将字符串添加到 ArrayList 中,而不是一起添加。
    • Dan 我不确定你在哪里看到它们被添加在一起。
    • 谢谢,我想这可能是答案,但我必须尝试所有这些。
    • for(String s : tokens) sum += Integer.parseInt(s);
    【解决方案3】:

    这样做:

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

    或者如果thearray已经实例化

    thearray.addAll(Arrays.asList(notseparated.split(" ")));
    

    【讨论】:

      【解决方案4】:

      我建议使用

      apache.commons.lang.StringUtils 库。

      这是最简单的,并且涵盖了您在用最少的代码拆分字符串时可能需要的所有不同条件。

      这里是拆分方法的参考: Split Method

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

      【讨论】:

        【解决方案5】:

        如果您想将字符串拆分为不同的部分,就像这里我将向您展示我如何在一天内拆分此字符串 14-03-2016 ,月份和年份。

         String[] parts = myDate.split("-");
                   day=parts[0];
                   month=parts[1];
                   year=parts[2];
        

        【讨论】:

          【解决方案6】:

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

          String[] words= inputString.split("\\s");
          

          【讨论】:

            【解决方案7】:

            试试这个: 字符串到 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
            

            【讨论】:

              猜你喜欢
              • 2019-08-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-12-04
              • 2011-11-02
              • 2010-09-19
              • 1970-01-01
              相关资源
              最近更新 更多