2017-08-08 19 views
0

我试图改变'18 rue D'armenie'或'25 boulevard D'armes'在'Armenie街18号'或'25'boulevard d'Armes'中的字符串。 如何String.replace这个改变?更正法语地址的大写。如何在正则表达式/ java中的某个字符后改变为大写字符串中的字符?

我目前做的是这样的:

WordUtils.capitalizeFully(street.trim()).replace(" D'", " d'"); 

我想添加第二个代替做这样的事情:

street.replace("'[a-zA-z]", "'[a-zA-Z]".toUpperCase()); 

谢谢。

+0

什么是预期的结果? –

+0

@WiktorStribiżew在一个长字符串中,我将所有单词的第一个字母改为大写。只是在这种情况下,单词是“D'armes”,它应该是“d'Armes”,所以我试图在字符串上添加一个替换字符,只会做出这种改变。 – user3450862

回答

0

String name = "stackoverflow"; name = name.substring(0,1).toUpperCase() + name.substring(1).toLowerCase();

name"Stackoverflow"

more example

+0

1.变化必须是:D'a ... to d'A ... 2.该构造可能不是弦中的第一个。 – Gangnus

2

您可以用下面的替换代码:

String s = "25 a-b boulevard d'armes Boulevard D'armes"; 
StringBuffer result = new StringBuffer(); 
Matcher m = Pattern.compile("\\b(D)(?=')|\\b(?<!-)\\p{L}(?!')").matcher(s); // Or "\\b(?:(D)(?=')|(?<!-)\\p{L}(?!'))" to make it a bit more efficient 
while (m.find()) { 
    if (m.group(1) == null) { 
     m.appendReplacement(result, m.group(0).toUpperCase()); 
    } else { 
     m.appendReplacement(result, m.group(1).toLowerCase()); 
    } 
} 
m.appendTail(result); 
System.out.println(result.toString()); 
// => 25 A-b Boulevard d'Armes Boulevard d'Armes 

Java online demo

图案的详细资料

  • \\b - 一个字边界
  • (D) - 第1组:大写字母D是...
  • (?=') - 随后与'
  • | - 或...
  • \\b - 一个字边界
  • (?<!-) - 这是不是前面有-(不大写的复合词的部分)
  • \\p{L} - 任何Unicode字母(你可以使用\\p{Ll}只匹配小写的,顺便说一下)
  • (?!') - 信件不应该跟在'之后。

注意:如果你想为l'd',和类似相同的行为,您可以添加替代第1组:\\b(D|L),或者更好,\\b([DL])(除非这些都是序列的字母,当你必须使用交替操作符)。

+0

不适用于'25 boulevard d'armes'的情况 –

+0

@VladBochenin该部分覆盖着'WordUtils.capitalizeFully' –

+0

是的,那是[Dd]'而不是D' – Gangnus

0
String s = "18 rue D'armenie"; 
Pattern p = Pattern.compile("([A-Z])'"); 
Matcher m = p.matcher(s); 
StringBuffer sb = new StringBuffe`enter code here`r(); 
while (m.find()) { 
    m.appendReplacement(sb, m.group(1).toLowerCase()); 
} 
m.appendTail(sb); 
System.out.println(sb.toString()); // 18 rue d'armenie 

在可以使“一个”大写的

0

为什么复杂的类似的方式?您可以将多个分隔符传递给WordUtils。capitalizeFully()

所以,你的问题的解决方案变得简单:

WordUtils.capitalizeFully(street.trim(), '\'', ' ').replace(" D'", " d'"); 
相关问题