Java中将字符串转换为字符串数组的最快方法

Java中将字符串转换为字符串数组的最快方法,java,android,Java,Android,将字符串转换为字符串数组的最快方法是什么(按2个字符分割): 字符串输入=“127856” 字符串[]输出={“12”、“78”、“56”} 目前我正在为使用,但速度非常慢: public static String[] mySplit(String input){ List<String> res=new ArrayList<String>(); for (int i = 0; i < input.length()-1; i+=2) {

将字符串转换为字符串数组的最快方法是什么(按2个字符分割):
字符串输入=“127856”
字符串[]输出={“12”、“78”、“56”}
目前我正在为使用
,但速度非常慢:

public static String[] mySplit(String input){
    List<String> res=new ArrayList<String>();
    for (int i = 0; i < input.length()-1; i+=2) {
        res.add("" + input.charAt(i) + "" + input.charAt(i+1));
    }
    String array[]=res.toArray(new String[0]);
    return array;
}
publicstaticstring[]mySplit(字符串输入){
List res=new ArrayList();
对于(int i=0;i
您也可以使用正则表达式:

public static String[] mySplit(String input){

  String[] output = input.split("(?<=\\G.{2})");
  return output;
}
publicstaticstring[]mySplit(字符串输入){

String[]output=input.split((?您也可以对其使用正则表达式:

public static String[] mySplit(String input){

  String[] output = input.split("(?<=\\G.{2})");
  return output;
}
publicstaticstring[]mySplit(字符串输入){

String[]output=input.split((?使用标准库通常是最好的解决方案。
java.lang.String
提供了一种方法
String[]split(String regex)
。在正则表达式中,a.代表一个字符,需要两个字符,因此正则表达式是

public static String[] mySplit(String input){
   String array[]=input.split("..");
   return array;
}
由于未经测试,我无法告诉您如果字符串中的字符数为奇数会发生什么


编辑:与未经测试的代码一样,正则表达式是错误的。请忽略我的答案。

使用标准库通常是最好的解决方案。
java.lang.String
提供了一种方法
String[]split(String regex)
。在正则表达式中,a.代表一个字符,您需要两个字符,因此正则表达式是

public static String[] mySplit(String input){
   String array[]=input.split("..");
   return array;
}
由于未经测试,我无法告诉您如果字符串中的字符数为奇数会发生什么


编辑:与未测试的代码一样,正则表达式是错误的。请忽略我的答案。

如果不想使用正则表达式,可以使用
子字符串,这应该比字符串串联快得多:

publicstaticstring[]mySplit(字符串输入){
int len=input.length(),索引=0;
//数组比列表快
字符串[]数组=新字符串[len/2+len%2];
对于(int i=0;i

如果不想使用正则表达式,可以使用
子字符串
,这应该比字符串串联快得多:

publicstaticstring[]mySplit(字符串输入){
int len=input.length(),索引=0;
//数组比列表快
字符串[]数组=新字符串[len/2+len%2];
对于(int i=0;i

函数的输出数组应该包含一半的输入长度元素(例如,
out.length
input.length()/2
)。接下来,输出中的每个位置都从输出索引乘以2开始,并在大于2的位置结束(但是
String.substring(int,int)
是互斥的)。我认为“最快的”编写函数的方法如下:

public static String[] mySplit(String input) {
    String[] out = new String[(1 + input.length()) / 2];
    for (int i = 0; i < out.length; i++) {
        out[i] = input.substring(i * 2, Math.min(2 + (i * 2), input.length()));
    }
    return out;
}
publicstaticstring[]mySplit(字符串输入){
String[]out=新字符串[(1+input.length())/2];
for(int i=0;i
函数的输出数组应该包含一半的输入长度元素(例如,
out.length
input.length()/2
)。接下来,输出中的每个位置都从输出索引乘以2开始,并在大于2的位置结束(但是
String.substring(int,int)
是互斥的)。我认为“最快的”编写函数的方法如下:

public static String[] mySplit(String input) {
    String[] out = new String[(1 + input.length()) / 2];
    for (int i = 0; i < out.length; i++) {
        out[i] = input.substring(i * 2, Math.min(2 + (i * 2), input.length()));
    }
    return out;
}
publicstaticstring[]mySplit(字符串输入){
String[]out=新字符串[(1+input.length())/2];
for(int i=0;i<代码> <代码>字符串[]ARR= S.S分裂(“@ @ gBuldGutt”,我怀疑正则表达式会比循环快,你认为哪种方式会使你的代码太慢?什么样的测量会导致这种洞察力?它太慢了?这是慢的(连接字符串)<代码>“+输入。CARAT(I)+”“+输入。CARAT(I + 1))<代码> >代码>输入子串(i,i+2)(也创建一个列表来创建一个数组不是最快的,尽管最简单)这里有一个内衬:<代码> String []RR= S.S拆开()(@ @ gBuldGutt,我怀疑正则表达式会比循环快,但是你认为你的代码过慢的方式是什么?什么样的测量导致了这种洞察力?“太慢了”?太慢了(字符和字符串的串接)
“+input.charAt(i)+”+input.charAt(i+1)
-试试
input.substring(i,i+2)
(创建创建数组的列表也不是最快的..尽管最简单)看看这个:不工作!如果input=“1122334455”,这个返回就是{“11”,“22334455”}不可能!请看一看:看这个:不工作!如果输入=“1122334455”,这个返回就是{“11”,“22334455”}不可能!请看一看这个:
jshell>“abcd”。拆分(“…”)
$1==>String[0]{}
返回空字符串!!!
jshell abcd.split(“…”
$1=>String[0]{
返回空字符串!!!此函数比我的函数快5倍。此函数比我的函数快5倍。比我的函数快5.5倍。比我的函数快5.5倍。