如何在某个索引处将String拆分为两个并将这两个部分保存在Java中?

时间:2014-02-05 07:37:59

标签: java string

我可以用substring()将它拆分两次并分别保存两半,但由于我要求效率,我需要一个更好的解决方案,理想情况下,在一次运行中将两半保存在String []中。

2 个答案:

答案 0 :(得分:2)

作为@Jon Skeet already mentioned,您应该真正分析性能,因为我无法想象,这实际上是瓶颈。但是,另一种解决方案是拆分String的char数组:

String str = "Hello, World!";

int index = 4;
char[] chs = str.toCharArray();
String part1 = new String(chs, 0, index);
String part2 = new String(chs, index, chs.length - index);

System.out.println(str);
System.out.println(part1);
System.out.println(part2);

打印:

Hello, World!
Hell
o, World!

这可能是一般性实施:

public static String[] split(String str, int index) {
    if (index < 0 || index >= str.length()) {
        throw new IndexOutOfBoundsException("Invalid index: " + index);
    }
    char[] chs = str.toCharArray();
    return new String[] { new String(chs, 0, index), new String(chs, index, chs.length - index) };
}
  

这种方法的问题是, (!)效率高于简单substring()调用,因为我的代码创建了一个对象,而不是使用两个{{ 1}}调用(数组是另外创建的对象)。事实上,substring()正是我在代码中所做的,而不是创建数组。唯一的区别是,通过两次调用substring(),索引将被检查两次。将其与对象分配成本进行比较取决于您。

答案 1 :(得分:0)

尝试stringName.split('*'),其中*是您要将字符串拆分为的字符。它返回一个String数组。