我有一个webapp,它调用web服务传递一个字符串参数(一个名字),该参数是一个大写的格式,并且可以包含强调的大写字符。 另一方面,服务器webapp不管理这种字符。
然后,客户端webapp必须仅使用小写的加重字符(例如:CLÉMENT>CLéMENT)。
您是否知道快速(使用utils?)方法/方法组合来做到这一点,而不必将String转换为Char表?
答案 0 :(得分:1)
不,看起来您必须将字符串转换为char[]
并从那里开始工作。尝试这样的事情:
public static String convert(String in) {
// put in the string the accented characters to be converted
final String accented = "ÁÉÍÓÚ";
char[] outChars = in.toCharArray();
for (int i = 0, n = outChars.length; i < n; i++)
if (accented.indexOf(outChars[i]) != -1)
outChars[i] = Character.toLowerCase(outChars[i]);
return new String(outChars);
}
像这样使用:
String in = "CLÉMENT"; // input string: CLÉMENT
String out = convert(in); // output string: CLéMENT
答案 1 :(得分:1)
似乎是一个奇怪的要求,但这是一个解决方案:
/** matches non-ASCII upper-case letters */
private static final Pattern UPPER =
Pattern.compile("[\\p{javaUpperCase}&&[^\\p{Upper}]]+");
private static String lowerNonAscii(String str, Locale locale) {
StringBuilder buffer = new StringBuilder();
Matcher matcher = UPPER.matcher(str);
int start = 0;
while (matcher.find()) {
String nonMatch = str.substring(start, matcher.start());
String match = str.substring(matcher.start(), matcher.end())
.toLowerCase(locale);
buffer.append(nonMatch)
.append(match);
start = matcher.end();
}
String tail = str.substring(start, str.length());
return buffer.append(tail)
.toString();
}
public static void main(String[] args) {
String test = "CL\u00C9MENT";
System.out.println(test + " > " + lowerNonAscii(test, Locale.ENGLISH));
}
请注意:
char
s 答案 2 :(得分:0)
请在此处阅读接受的答案:Using Locales with Java's toLowerCase() and toUpperCase()。
如果您使用带语言环境的toUpperCase,则应尊重重音字符。