2

大文字形式の文字列パラメーター (名前) を渡す Web サービスを呼び出す Web アプリケーションがあり、強調された大文字を含めることができます。一方、サーバー webapp はこの種の文字を管理しません。

次に、クライアント webapp は、強調された文字のみを小文字にする必要があります (例: CLÉMENT > CLéMENT)。

String を Char のテーブルに変換することなく、それを行うための簡単な (utils を使用して?) メソッド/メソッドの組み合わせを知っていますか?

4

3 に答える 3

1

いいえ、文字列をaに変換し、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
于 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

ここで受け入れられた答えを読んでください:JavaのtoLowerCase()およびtoUpperCase()でのロケールの使用

ロケールでtoUpperCaseを使用する場合は、アクセント記号付きの文字を尊重する必要があります。

于 2013-03-07T13:40:43.187 に答える