2017-05-07 13 views
1

我如何拆分(在Java)的每一个字(一个大写分开)开始用大写字母,每个数字的任何单词,并在字符串末尾位数使用正则表达式f.ex:拆分末

  1. HouseCat22
  2. wolf1
  3. thisIsTheEnd15

对于1)I 3个需要元件的阵列:

House 
Cat 
22 

对于2)我需要2个元素的数组:

Wolf 
1 

对于3)应该拆分为5个元素:

this 
Is 
The 
End 
15 

我一直试图对没有成功小时...但我根本没有得到。 以下分词:
(?<=[a-z])(?=[A-Z])
但我不知道如何拆分行结束处的数字。

我真的很感谢一些帮助。 非常感谢! 迪迪埃

+0

您可以拆分的话只是'' – Michael

+0

@Didier,请检查2个解决方案(我删除了一个暂时),并请让知道这两个作品为你。 –

回答

0

您可以匹配的号码模式添加到正前瞻:

(?<=[a-z])(?=[0-9A-Z]) 
       ^^^ 

regex demo。但是,此解决方案不会在大写字母和数字之间进行拆分(因此,EndD15将拆分为EndD15)。

您可以考虑匹配方法(这将是更有效和更可读的),你可以使用

[a-zA-Z][a-z]*|[0-9]+ 

this demo

这将匹配:

  • [a-zA-Z][a-z]* - 任何ASCII字母,然后任何0+小写ASCII字母
  • | - 或
  • [0-9]+ - 1+数字。

随着需求的变化,这可能会进一步调整。样品Java code:(?= [AZ])

String s = "thisIsTheEnd15"; 
Matcher m = Pattern.compile("[a-zA-Z][a-z]*|[0-9]+").matcher(s); 
List<String> res = new ArrayList<>(); 
while (m.find()) { 
    res.add(m.group(0)); 
} 
System.out.println(res); 
// => [this, Is, The, End, 15] 
+1

如果前一个单词只有一个字母,比如'A'或'I',那么要求先写下小写字母将不起作用。 – 4castle

+0

@ 4castle:三种解决方案中的每一种都是不同的,但对于提供的示例已经足够了。 –

+0

@WiktorStribiżew我认为这只是因为这是OP未考虑的边缘案例。 – Michael