我有:
1234 2345 3456 4567
当我尝试String.split(" ",2)
时,我得到:
{1234} , {2345 3456 4567}
但我需要:
{1234},{2345}
我只想要前两个元素。我如何用Java实现这个?
提前致谢。
编辑:这只是一个庞大的数据集中的一行。
答案 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)
indexOf
,找到包含所需内容的子字符串。split()
。以下是一种仅使用indexOf
和substring
的替代解决方案。
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