2

我有一个 web 应用程序,它调用一个传递字符串参数(名称)的 web 服务,该字符串参数是大写格式,可以包含强调的大写字符。另一方面,服务器 webapp 不管理这种字符。

然后,客户端 web 应用程序必须仅小写重音字符(例如:CLÉMENT > CLéMENT)。

您是否知道一种快速(使用 utils ?)方法/方法组合来做到这一点,而无需将 String 转换为 Char 表?

4

3 回答 3

1

不,看起来您必须将字符串转换为 achar[]并从那里开始工作。尝试这样的事情:

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
于 2013-03-07T13:41:42.003 回答
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
于 2013-03-07T14:43:34.660 回答
0

请在此处阅读已接受的答案:Using Locales with Java's toLowerCase() 和 toUpperCase()

如果将 toUpperCase 与区域设置一起使用,则应尊重重音字符。

于 2013-03-07T13:40:43.187 回答