java正则表达式:用大写字母有条件地溢出字符串

时间:2016-01-08 21:10:05

标签: java regex string

我不熟悉正则表达式。也许这是一个简单的问题。 给定一个字符串

XYZHelloWorldT

我需要将字符串数组作为

返回
{XYZ Hello World T}

即,取所有以一个大写字母开头的单词,然后是一个或多个小写字母多个大写字母 ,然后是大写字母开始一个新单词。其余部分由空位分隔为字符串数组中的其他元素。

我可以直接处理这些角色。只是想知道我是否可以通过正则表达式直接在string的split方法中做到这一点?我找到了像Java: Split string when an uppercase letter is found这样的东西,但不知道如何使用它来解决我的问题。感谢

2 个答案:

答案 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();
	}
}

  

你计划在我的算法中使用这个正则表达式是什么意思?