任何人都知道如何隐藏FirstName
到First Name
。根据java中的大写拆分
拆分必须基于大写字母来进行,但它应该排除第一个字母。
我知道如何使用拆分。 除拆分功能外,还有其他方法可以实现。
任何人都知道如何隐藏FirstName
到First Name
。根据java中的大写拆分
拆分必须基于大写字母来进行,但它应该排除第一个字母。
我知道如何使用拆分。 除拆分功能外,还有其他方法可以实现。
不是真的split
,只是replaceAll
:
str.replaceAll("(?!^)([A-Z])", " $1")
此解决方案假定您不想要一个大写英文字母前添加空间,如果它是字符串中的第一个字符。所以," FirstName"
将变成" First Name"
(注意2个空格)。
(?!^)
是负面预读(?!pattern)
,只是检查这不是字符串^
的开头。我捕获(pattern)
英文大写字母,并使用替换文本中的捕获文本$1
($1
表示捕获组中捕获的任何内容被置于替换字符串中 - 在这种情况下只有1个捕获组)。
另一种解决方案是一个大写的英文字母前添加空间,只有当它是由小写英文字母开头:
str.replaceAll("(?<=[a-z])([A-Z])", " $1")
(?<=[a-z])
为正向后看(?<=pattern)
,检查是否首都字符[A-Z]
前面有小写英文字母[a-z]
。其余的已经在上面解释过了。
根据要求,模式可能会有很大差异。你只给出一个例子而不是具体的要求,所以我会大胆猜测并为你挑选一个模式。
6至11倍的replaceAll快:
StringBuilder s = new StringBuilder("FirstName");
for(int i = 1; i < s.length(); ++i) {
if(Character.isUpperCase(s.charAt(i))) {
s.insert(i++, ' ');
}
}
替补:
long atStart = System.currentTimeMillis();
for(int j = 0; j < 1000000; ++j) {
StringBuilder s = new StringBuilder("FirstName");
for(int i = 1; i < s.length(); ++i) {
if(Character.isUpperCase(s.charAt(i))) {
s.insert(i++, ' ');
}
}
}
long elapsed1 = System.currentTimeMillis() - atStart;
atStart = System.currentTimeMillis();
for(int j = 0; j < 1000000; ++j) {
String s = "FirstName";
s = s.replaceAll("(?!^)([A-Z])", " $1");
}
long elapsed2 = System.currentTimeMillis() - atStart;
System.err.println("Ratio: " + elapsed2/(double)elapsed1);
http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html:从发布JDK 5开始,这个类已经补充了一个为单个线程StringBuilder设计的等价类。由于StringBuilder类支持所有相同的操作,所以通常应优先使用StringBuilder类,但速度更快,因为它不执行同步。 – Aubin 2013-02-12 07:44:03
你可以创建你自己的,这样的事情:
private String split(String string) {
StringBuffer sb = new StringBuffer();
for (Character character: string.toCharArray()) {
if (Character.isUpperCase(character)) {
sb.append(" ");
}
sb.append(character);
}
return sb.toString().trim();
}
您可以使用下面的代码snap
String array[]= "FirstMiddleLast".replaceAll("(?!^)([A-Z])", " $1").split(" ");
for(String name:array){
System.out.println(name);
}
什么是你的'split'代码? – 2013-02-12 07:03:23
你可以在这里找到你的问题的答案: http://stackoverflow.com/questions/3752636/java-split-string-when-an-uppercase-letter-is-found – 2013-12-04 09:49:40