JavaRush /Java Blog /Random-KO /MessageFormat 클래스
Виталий Рыжаков
레벨 40
Москва

MessageFormat 클래스

Random-KO 그룹에 게시되었습니다
MessageFormat이 문서에서는 작업 2412(task2412)에서 사용되는 클래스에 대해 이야기하고 싶습니다 . 클래스 MessageFormat - 1이 클래스는 MessageFormat문자열을 생성하도록 설계되었습니다. 이 Java 클래스는 객체 세트를 가져와 형식을 지정한 다음 형식이 지정된 문자열을 템플릿의 적절한 위치에 삽입합니다. 이는 정적 메소드에 대한 일종의 대안(또는 추가)입니다 String.format. 먼저, 객체를 생성하지 않고 정적 메소드를 사용하여 이 Java 클래스를 사용하는 간단한 예입니다.
int planet = 7;
String event = "a disturbance in the Force";
String result = MessageFormat.format(
        "At {0, time, medium} on {0, date}, there was {1} on planet {2, number, integer}.",
        new Date(), event, planet);
System.out.println(result);
MessageFormat.format여기에서는 문자열 템플릿과 실제로 괄호로 구분된 위치에 삽입될 개체가 인수로 전달되는 정적 메서드가 호출됩니다 {}. 시작하는 개체의 위치는 괄호 안에 지정되며 0형식 지정 유형(있는 경우)도 지정됩니다. 출력은 다음과 같습니다:
At 21:25:54 on 28 апр. 2018 г., there was a disturbance in the Force on planet 7.
다음 예제에서는 이미 클래스의 객체를 생성합니다 MessageFormat.
int fileCount = 1273;
String diskName = "MyDisk";
Object[] testArgs = {fileCount, diskName};

MessageFormat form = new MessageFormat(
        "The disk \"{1}\" contains {0} file(s).");

System.out.println(form.format(testArgs));
클래스 객체가 생성되면 MessageFormat문자열 템플릿이 해당 생성자에 전달됩니다. format다음으로, 객체에 대한 메서드를 호출할 때 문자열 템플릿에 삽입될 객체 배열이 인수로 전달됩니다. 출력은 다음과 같습니다:
The disk "MyDisk" contains 1 273 file(s).
변수 값에 따라 필요한 텍스트가 선택되었는지 확인하는 것도 가능합니다. if...else클래스만 사용하는 일종의 연산자 구현입니다 ChoiceFormat. 코드는 다음과 같습니다.
MessageFormat form = new MessageFormat("Я могу {1} {0}.");
int count = 2;
String exercise = "подтянуться";
Object[] testArgs = {count, exercise};

double[] filelimits = {0,2,5};
String[] filepart = {"{0} раз","{0} раза","{0} раз"};
ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart);
form.setFormatByArgumentIndex(0, fileform);

System.out.println(form.format(testArgs));
이 코드는 변수 값에 따라 count행의 출력을 다음과 같이 변경합니다.
  • count = 1결론이 이렇 다면

    Я могу подтянуться 1 раз.
  • count = 2결론이 이렇 다면

    Я могу подтянуться 2 раза.
  • count = 7결론이 이렇 다면

    Я могу подтянуться 7 раз.
double[] filelimits이 코드는 문자열 출력이 변경되는 값의 한계를 지정하는 배열을 생성합니다 . 그리고 배열은 String[] filepart사용할 수 있는 문자열의 변형을 나타냅니다. filepart[j]변수값에서 라인 옵션을 선택하는 조건은 다음 과 같이 결정됩니다 filelimits[j] =< count < filelimits[j+1]. 다음으로 객체가 생성되고 배열 되어 ChoiceFormat fileform해당 생성자에 전달됩니다 . 메소드를 사용하면 메소드가 호출될 때 행 템플릿의 인덱스 0에 대해 객체에 지정된 형식을 사용한다고 객체에 알립니다 . 괜찮은. 원칙적으로 당신은 이미 Java 클래스를 사용하지 않겠다는 생각을 갖고 있을 수도 있지만 이것이 전부는 아니라는 것을 알고 있습니다. 다음 코드가 있습니다. double[] filelimitsString[] filepartform.setFormatByArgumentIndex(0, fileform)MessageFormat formformatChoiceFormat fileformMessageFormat
MessageFormat pattform = new MessageFormat("There {0} on {1}.\n{2} {2}");
int count = 0;
Date date = new Date();
Object[] testArgs = {count, "ADisk", date, date};

double[] filelimits = {0,1,2};
String[] filepart = {"are no files","is one file","are {0} files"};
ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart);

Format[] testFormats
        = {fileform, null, DateFormat.getDateInstance(DateFormat.SHORT), DateFormat.getTimeInstance(DateFormat.SHORT)};
pattform.setFormats(testFormats);

System.out.println(pattform.format(testArgs));
여기에 배열의 주요 기능이 있습니다 Format[] testFormats. Format이 배열에는 배열에 정의된 개체의 형식을 지정하는 개체(추상 클래스 구현)를 추가합니다 Object[] testArgs. 개체에 서식을 지정할 필요가 Format[] testFormats없으면 null. 다음으로, 메소드를 사용하여 pattform.setFormats(testFormats)MessageFormat pattform패턴의 모든 인덱스가 배열에 정의된 형식을 사용해야 함을 객체에 알립니다 Format[] testFormats. 이 예의 경우 출력은 다음과 같습니다.
There are no files on ADisk.
28.04.18 22:10
이상입니다. 2412번 문제를 해결하실 때 어려움이 없으시길 바랍니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION