2011-03-15 3 views
24

다음 C# 코드를 Java로 변환 중입니다. Invariant Culture라는 .NET 개념에 해당하는 Java가 있습니까? 불변 문화의 Java 상당

string upper = myString.ToUpperInvariant(); 

고정 문화권이 정말 미국 문화이기 때문에

은, 그냥 자바 같은 것을 할 수 있지만, 더 나은 방법이 있는지 궁금 하군요 :

String upper = myString.toUpperCase(Locale.US); 

답변

20

업데이트 : 자바 도 6으로 설명한다 Locale.ROOT 도입 :

이것은 로케일 모든 기본 로케일로 간주되어, 상기 로케일 민감한 동작 언어/국가 중립 로케일로서 사용된다.

미국을 사용하는 것보다 나을 것 같지만 아래 코드와 비교해 보지 않았습니다.


아니요, 기본적으로 올바른 방법입니다. 이지만 서식의 관점에서 볼 때 미국 문화와 불변 문화의 차이점은 케이싱 규칙에 영향을 미치지 않는다고 생각합니다.

편집 :

using System; 
using System.Globalization; 

class Test 
{ 
    static void Main() 
    { 
     CultureInfo us = new CultureInfo("en-US"); 
     for (int i = 0; i < 65536; i++) 
     { 
      char c = (char) i; 
      string s = c.ToString(); 
      if (s.ToUpperInvariant() != s.ToUpper(us)) 
      { 
       Console.WriteLine(i.ToString("x4")); 
      } 
     } 
    }  
} 

출력 :

00b5 
0131 
017f 
01c5 
01c8 
01cb 
01f2 
0345 
0390 
03b0 
03c2 
03d0 
03d1 
03d5 
03d6 
03f0 
03f1 
03f5 
1e9b 
1fbe 
사실, 빠른 테스트 프로그램은 가 대문자가 불변 문화에 미국 문화에 .NET 다르게 있습니다 문자가 표시

지금 당장 볼 시간이 없지만 조사 할 가치가 있습니다. Java에서 동일한 차이점이 적용되는지는 잘 모르겠다. 아마도 샘플을 받아서 코드가 원하는 것을 해결하고 싶을 것이다.

편집 : 단지 완성도를 높이기 위해서는 개개의 문자 만 검사하는 것이 좋습니다. 반면에 실제로는 전체 문자열을 대문자로 바꾸는 것이 효과적 일 수 있습니다.

위의 경우에 Java 코드를 보면 tr, az 및 lt 국가에 대한 로캘 별 동작 만있는 것으로 보입니다. 나는 tr가 터키라는 것을 알고 있지만 다른 것에 대해서는 모른다 ...

+1

우시 : AZ - azerbaijan, lt 아니 리투아니아 – bestsss

+0

[Locale.ROOT] (https://docs.oracle.com/javase/8/docs/api/java/util/Locale.html#ROOT)는 어떻게됩니까? ([관련 질문/답변] (https://stackoverflow.com/questions/41108804/what-is-the-c-sharp-equivalent-of-javas-locale-root-and-locale-getdefault) .) –

+1

@AvPinzur : 그래, 아마도 그게 가장 적절할거야. 나는 그것을 언급하도록 업데이트 할 것이다. –

0

이것은 어떤 로케일을 사용하지 않고도 얻을 수있는 가장 변하지 않은 것으로 보인다. 당신이 확장 된 유니 코드 (과거 UTF16)에 대한 관심 경우 (당신은 당신이 그것을 필요하지 않은 코드 포인트에 대해 알고하지 않는 경우 :)) , 당신은 코드 포인트 솔루션을 이동해야합니다

static String toUpperCase(String s){ 
    char[] c = s.toCharArray(); 
    for (int i=0;i<c.length;i++){ 
     c[i]=Character.toUpperCase(c[i]); 
    } 
    return String.copyValueOf(c); 
}