我想把一个字符串拆分成一个满足以下条件的字符串数组
尽管输入字符串仅由ASCII字符组成时似乎很容易,但它可能包含多字节字符的事实让我感到困惑。
提前感谢您。
编辑:我添加了我的代码实现。(低效)
String[]
。
s.getBytes(encoding).length
不应超过maxsize(int)
。如果我使用
StringBuilder
或+
运算符连接拆分后的字符串,结果应该与原始字符串完全相同。输入字符串可能有 Unicode 字符,在编码为 UTF-8 等时可能有多个字节。
public static String[] SplitStringByByteLength(String src,String encoding, int maxsize)
还有测试代码:
public boolean isNice(String str, String encoding, int max)
{
//boolean success=true;
StringBuilder b=new StringBuilder();
String[] splitted= SplitStringByByteLength(str,encoding,max);
for(String s: splitted)
{
if(s.getBytes(encoding).length>max)
return false;
b.append(s);
}
if(str.compareTo(b.toString()!=0)
return false;
return true;
}
尽管输入字符串仅由ASCII字符组成时似乎很容易,但它可能包含多字节字符的事实让我感到困惑。
提前感谢您。
编辑:我添加了我的代码实现。(低效)
public static String[] SplitStringByByteLength(String src,String encoding, int maxsize) throws UnsupportedEncodingException
{
ArrayList<String> splitted=new ArrayList<String>();
StringBuilder builder=new StringBuilder();
//int l=0;
int i=0;
while(true)
{
String tmp=builder.toString();
char c=src.charAt(i);
if(c=='\0')
break;
builder.append(c);
if(builder.toString().getBytes(encoding).length>maxsize)
{
splitted.add(new String(tmp));
builder=new StringBuilder();
}
++i;
}
return splitted.toArray(new String[splitted.size()]);
}
这是解决这个问题的唯一方法吗?