如何在Java中第二次出现字符之前拆分字符串
我有:如何在Java中第二次出现字符之前拆分字符串,java,string,function,split,Java,String,Function,Split,我有: 1234 2345 3456 4567 当我尝试String.split(“,2)时,我得到: {1234} , {2345 3456 4567} 但我需要: {1234},{2345} 我只想要前两个元素。如何在Java中实现此功能? 提前谢谢。 编辑:这只是一个庞大数据集的一行 通过调用indexOf两次,找到包含所需内容的子字符串 仅对该子字符串使用split() 这里有一个替代解决方案,它只使用indexOf和子字符串 public class Program{
1234 2345 3456 4567
当我尝试String.split(“,2)
时,我得到:
{1234} , {2345 3456 4567}
但我需要:
{1234},{2345}
我只想要前两个元素。如何在Java中实现此功能?提前谢谢。
编辑:这只是一个庞大数据集的一行
indexOf
两次,找到包含所需内容的子字符串split()
indexOf
和子字符串
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
您可以这样做:-
String[] s=string.split("");
s[2]=null;
s[3]=null;
现在只有{1234},{2345}
或者更好的方法是,将字符串本身分开,然后应用split()
我假设您需要前两个字符串,然后执行以下操作:
String[] res = Arrays.copyOfRange(string.split(" "), 0, 2);
应能工作的easiset(但不是最快的)是首先拆分字符串
String test = "123 2345 3456 4567"
String[] splitted = test.split(" ");
并将切片转换为结果数组:
String[] result = Arrays.copyOfRange(splitted, 2);
这在大多数情况下都很有效。唯一的问题可能是,当中间数组变得非常大时。然后,您将拥有大量中间内存,垃圾收集器必须清理这些内存。但对于现代优化(如escape analysis),即使这样也可能不会对性能产生太大影响。您有任何选择,一个是进行拆分并复制前两个结果 下一个代码具有下一个输出: 前两个:
1234 2345 另一种方法是用regexp替换原始字符串,然后执行拆分: 下一个代码的结果(我们将空格替换为): 过滤:1234:2345 前两项: 1234 2345
另一种单线解决方案是: 让我们假设您有:
String a="1234 2343545 356 88";
因此,单行命令是:
String b[]=a.substring(0,a.indexOf(" ",a.indexOf(" ")+1)).split(" ");
现在,您将“b”作为第一次出现的两个数组:
b[0] //1234
b[1] //2343545
我知道,我考虑过这个问题,但有更简单的解决方案吗?@kaushaya,不是真的,没有。据我所知,这个问题没有库函数。@kaushaya,我刚刚添加了第二个根本不使用string.split的解决方案。如果你关心速度,你可能应该将这个解决方案与执行
拆分的解决方案进行基准测试Arrays.copyOfRange()
并使用更快的方法。在每个空间上进行拆分,然后只使用结果数组的前2个元素,效果如何?效率会稍低一些。我已经考虑过了。空间还是时间?有时我宁愿放弃效率,而不是重新设计周空间和“代码”明智的。
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("--------");
}
String a="1234 2343545 356 88";
String b[]=a.substring(0,a.indexOf(" ",a.indexOf(" ")+1)).split(" ");
b[0] //1234
b[1] //2343545