我必須將給定的文本翻譯成另一種格式。
例如,它是給定的文本:
#The number of cars that you can put in garage = 4
t1n1b2p2t1m1b2a2
v1j1t1c1b3t1b1a1m1j1b4
我必須將其更改為:
#The number of cars that you can put in garage = 4
Tesla Nissan BMW | Porsche Tesla Maserati | BMW Audi |
Volvo Jaguar Tesla Cadillac | BMW Tesla | BMW Audi Maserati Jaguar | BMW |
但還有另外一種情況:
#The number of cars that you can put in garage is different
^3
t1b1t1b3
^2
m2a1t1
^4
a4v2p2
我必須將其更改為:
#The number of cars that you can put in garage is different
#Number of cars = 3
Tesla BMW Tesla | BMW |
#Number of cars = 2
Maserati | Audi Tesla |
#Number of cars = 4
Audi | Volvo Porsche |
uj5u.com熱心網友回復:
先上代碼。代碼后的說明。
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Garages {
private static final Map<Character, String> CAR_MAKES = Map.of('a', "Audi",
'b', "BMW",
'c', "Cadillac",
'j', "Jaguar",
'm', "Maserati",
'n', "Nissan",
'p', "Porsche",
't', "Tesla",
'v', "Volvo");
private static final Pattern REGEX = Pattern.compile("\\d $");
private static String handleLine(String line, int limit) {
StringBuilder result = new StringBuilder();
int total = 0;
char[] letters = line.toCharArray();
for (int j = 0; j < letters.length; j ) {
if (j % 2 == 0) {
// should be a letter
String make = CAR_MAKES.get(letters[j]);
result.append(make);
}
else {
// should be a number
int amount = letters[j] - '0';
for (int k = 1; k < amount; k ) {
result.append(' ');
}
result.append(' ');
total = amount;
if (total >= limit) {
result.append("| ");
total = 0;
}
}
}
return result.toString();
}
private static String handleLines(String[] lines) {
StringBuilder result = new StringBuilder();
result.append(lines[0]);
result.append(System.lineSeparator());
Matcher matcher = REGEX.matcher(lines[0]);
int limit = 0;
boolean hasLimit = matcher.find();
if (hasLimit) {
limit = Integer.parseInt(matcher.group());
}
for (int i = 1; i < lines.length; i ) {
if (hasLimit) {
result.append(handleLine(lines[i], limit));
}
else {
if (i % 2 == 1) {
// amount line
limit = Integer.parseInt(lines[i].substring(1));
result.append("#Number of cars = " limit);
}
else {
result.append(handleLine(lines[i], limit));
}
}
result.append(System.lineSeparator());
}
return result.toString();
}
private static String handleInput(String input) {
return handleLines(input.split("\n"));
}
public static void main(String[] args) {
String first = """
#The number of cars that you can put in garage = 4
t1n1b2p2t1m1b2a2
v1j1t1c1b3t1b1a1m1j1b4
""";
System.out.println(handleInput(first));
String second = """
#The number of cars that you can put in garage is different
^3
t1b1t1b3
^2
m2a1t1
^4
a4v2p2
""";
System.out.println("====================================================================");
System.out.println(handleInput(second));
}
}
- 上述代碼僅基于您問題中的資料,不檢查無效資料。
- 代碼使用了最初在 JDK 13 中添加的文本塊。(請參閱上面代碼中的變數
first和second方法main。)在文本塊中,行分隔符是\n. - JDK 9 中的Map介面
of添加了靜態方法。我根據您問題中的資料填充了地圖。 - 的
Map密鑰型別必須是一個類(而不是原始的)。因此,密鑰型別是java.lang.Character(而不是char)。自動裝箱會自動將char文字轉換為Character物件。 - 輸入的第一行確定應如何決議和處理輸入的其余部分。我為此使用了正則運算式。我檢查輸入的第一行是否以數字結尾。
- 在第一行之后,我假設輸入的每個后續行要么是
^字符后跟一個數字,要么是其中每個奇數字符(即第一個、第三個、第五個等)是一個字母而每個偶數字符都是一個數字的行。因此,如果輸入不遵循此模式,代碼可能會拋出例外——或給出錯誤的結果。
希望代碼的其余部分是清晰且不言自明的。
這是我運行上述代碼時得到的結果。
#The number of cars that you can put in garage = 4
Tesla Nissan BMW | Porsche Tesla Maserati | BMW Audi |
Volvo Jaguar Tesla Cadillac | BMW Tesla | BMW Audi Maserati Jaguar | BMW |
====================================================================
#The number of cars that you can put in garage is different
#Number of cars = 3
Tesla BMW Tesla | BMW |
#Number of cars = 2
Maserati | Audi Tesla |
#Number of cars = 4
Audi | Volvo Porsche |
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/341446.html
上一篇:替換所有其他特定字串
