MessageFormat
이 문서에서는 작업 2412(task2412)에서 사용되는 클래스에 대해 이야기하고 싶습니다 .
이 클래스는
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[] filelimits
String[] filepart
form.setFormatByArgumentIndex(0, fileform)
MessageFormat form
format
ChoiceFormat fileform
MessageFormat
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번 문제를 해결하실 때 어려움이 없으시길 바랍니다.
GO TO FULL VERSION