我不熟悉正则表达式。也许这是一个简单的问题。 给定一个字符串
XYZHelloWorldT
我需要将字符串数组作为
返回{XYZ Hello World T}
即,取所有以一个大写字母开头的单词,然后是一个或多个小写字母或多个大写字母 ,然后是大写字母开始一个新单词。其余部分由空位分隔为字符串数组中的其他元素。
我可以直接处理这些角色。只是想知道我是否可以通过正则表达式直接在string的split方法中做到这一点?我找到了像Java: Split string when an uppercase letter is found这样的东西,但不知道如何使用它来解决我的问题。感谢
答案 0 :(得分:2)
由于您可以拥有多个连续的大写字母,因此您希望为小写字母提供lookbehind以及为大写字母预测:
(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])
如果您需要支持其他语言,则应使用posix character classes:
(?<=\\p{Lower})(?=\\p{Upper})|(?<=\\p{Upper})(?=\\p{Upper}\\p{Lower})
如果您处于小写和大写字母之间,则第一个轮换将匹配。第二个 - 如果你是一个大写和另一个大写,然后是小写。
答案 1 :(得分:0)
这是Java中用于查找此单词的算法,但不建议用于大文本,也不包括数字和空格。
public class TestString
{
static int i = 0, lenght;
static char array[];
public static void main(String[] args){
String result = "XYZHelloWorldTRTTTePoPoIiiiiiooY";
array = result.toCharArray();
lenght=array.length;
StringBuffer words = new StringBuffer();
for(; i< lenght; i++){
words.append(makeArray());
}
String resultOut[]= words.toString().split(",");
for(String key: resultOut){
System.out.println(key);
}
System.exit(0);
}
private static String makeArray()
{
StringBuffer word = new StringBuffer();
String upper, normal;
boolean lower=false;
for(; i< lenght; ++i){
word.append(array[i]);
if(i<lenght-2){
upper=String.valueOf(array[i+1]).toUpperCase();
normal=String.valueOf(array[i+1]);
if(upper.equals(normal)){
upper=String.valueOf(array[i+2]).toUpperCase();
normal=String.valueOf(array[i+2]);
if(upper.equals(normal)){
if(lower){
break;
}
continue;
}else{
break;
}
}else{
lower=true;
continue;
}
}else{
if(lower && i<lenght-1){
String lowerStr=String.valueOf(array[i+1]).toLowerCase();
normal=String.valueOf(array[i+1]);
if(lowerStr.equals(normal)){
continue;
}else{
break;
}
}
break;
}
}
word.append(",");
return word.toString();
}
}
你计划在我的算法中使用这个正则表达式是什么意思?