如何在Java中第二次出现字符之前拆分字符串

时间:2014-06-20 10:04:46

标签: java string function split

我有:

1234 2345 3456 4567

当我尝试String.split(" ",2)时,我得到:

{1234} , {2345 3456 4567}

但我需要:

{1234},{2345}

我只想要前两个元素。我如何用Java实现这个?
提前致谢。

编辑:这只是一个庞大的数据集中的一行。

7 个答案:

答案 0 :(得分:7)

我假设您需要前两个字符串,然后执行以下操作:

    String[] res = Arrays.copyOfRange(string.split(" "), 0, 2);

答案 1 :(得分:2)

你可以这样做: -

String[] s=string.split("");
s[2]=null;
s[3]=null;

现在你只有{1234},{2345}

或者更好的方法是,将String本身分开,然后应用split()

String s=string.substring(string.indexOf("1"),string.indexOf("5")+1);// +1 for including the 5
s.split(" ");

答案 2 :(得分:1)

你有任何选择,一个是分割并复制前两个结果。

下一个代码有下一个输出:

前两个:
1234

2345

    public static void main(String[] args) {
    String input="1234 2345 3456 4567";

    String[] parts= input.split(" ");
    String[] firstTwoEntries = Arrays.copyOf(parts, 2);

    System.out.println("First two: ");
    System.out.println("----------");
    for(String entry:firstTwoEntries){
        System.out.println(entry);
    }
    System.out.println("----------");
}

另一种方法是用正则表达式替换原始字符串,然后执行拆分:

下一个代码的结果(我们用“:”代替空格:

过滤:1234:2345

前两个:

1234

2345

    public static void main(String[] args) {
    String input="1234 2345 3456 4567";

    //we find first 2 and separate with :
    String filteredInput= input.replaceFirst("^([^\\s]*)\\s([^\\s]*)\\s.*$", "$1:$2");
    System.out.println("Filtered: "+filteredInput);

    String[] parts= filteredInput.split(":");
    System.out.println("First two: ");
    System.out.println("--------");
    for(String part:parts){
        System.out.println(part);
    }
    System.out.println("--------");

}

答案 3 :(得分:0)

  1. 通过两次调用indexOf,找到包含所需内容的子字符串。
  2. 仅对该子字符串使用split()
  3. 以下是一种仅使用indexOfsubstring的替代解决方案。

    public class Program{
        public static void main(String[] args) {
            String input = "1234 2345 3456 4567";
            int firstIndex = input.indexOf(" ");
            int secondIndex = input.indexOf(" ", firstIndex + 1);
            String[] output = new String[] {input.substring(0, firstIndex),
                input.substring(firstIndex+1, secondIndex)};
            System.out.println(output[0]);
            System.out.println(output[1]);
        }
    }
    

    输出:

    1234
    2345
    

答案 4 :(得分:0)

String input="1234 5678 9012 3456";
String[] result=Arrays.copyOf(input.split(" "),2);

应该有效

答案 5 :(得分:0)

easiset(但不是最快)是先拆分字符串

String test = "123 2345 3456 4567"
String[] splitted = test.split(" ");

和切片结果数组:

String[] result = Arrays.copyOfRange(splitted, 2);

这在大多数情况下都能正常使用。唯一的问题可能是,当中间数组变得非常庞大时。然后,您将拥有大量的中间内存,垃圾收集器必须清理它们。但是,通过现代优化(如逃逸分析),即使这可能也不会产生很大的性能影响。

答案 6 :(得分:0)

另一种单线解决方案是:

假设你有这个:

String a="1234 2343545 356 88";

因此,单行命令将是:

String b[]=a.substring(0,a.indexOf(" ",a.indexOf(" ")+1)).split(" ");

现在你有 "b" 作为两个第一次出现的数组:

b[0] //1234
b[1] //2343545