我有一种情况,如下所示的字符将出现在定长文件中
{ABCDEFGHI =这组字符分别代表正数0123456789
} JKLMNOPQR =这组字符分别代表负数0123456789
我需要使用Java将它们转换为对应的数字0123456789(正负)。 例如:
45 {应该转换为450(因为'{'代表正数'0')
45A应该转换为451(因为'A'代表正数'1')
45B应该转换为452(因为'A'代表正数'2')
45}应该转换为-450(因为'}'表示负数'0')
45J应该转换为-451(因为'J'表示负数'1')
45K应该转换为-452(因为'K'表示负数'2')
我在Java中不是很好,所以我使用下面的代码首先使用replace函数将包含上述字符的字符串替换为对应的数字。我知道一定有更好的方法。有什么可以建议的吗?
public static String replaceChar(String str) {
if (str.contains("{")) {
str = str.replace("{", "0");
}
if (str.contains("A")) {
str = str.replace("A", "1");
}
if (str.contains("B")) {
str = str.replace("B", "2");
}
if (str.contains("C")) {
str = str.replace("C", "3");
}
if (str.contains("D")) {
str = str.replace("D", "4");
}
if (str.contains("E")) {
str = str.replace("E", "5");
}
if (str.contains("F")) {
str = str.replace("F", "6");
}
if (str.contains("G")) {
str = str.replace("G", "7");
}
if (str.contains("H")) {
str = str.replace("H", "8");
}
if (str.contains("I")) {
str = str.replace("I", "9");
}
if (str.contains("J")) {
str = str.replace("J", "1");
}
return str;
}
答案 0 :(得分:0)
我们可以尝试遍历字符串,然后使用模数来计算数值:
String input = "ABCDEFGHIJKLMNOPQR";
StringBuilder sb = new StringBuilder();
for (int i=0; i < input.length(); ++i) {
sb.append(String.valueOf((input.charAt(i) - 'A') % 10));
}
System.out.println(input);
System.out.println(sb.toString());
ABCDEFGHIJKLMNOPQR
012345678901234567
我的输出与您的问题完全吻合,但是您的问题似乎在字母字符串中有一些错别字。
答案 1 :(得分:0)
您可以将字母映射为@Tim,将字母映射为数字,并使用字母作为键,将数字作为值,使用正则表达式检查是否为负,最后用映射值替换输入字符串中包含的映射键:
public static void main(String[] args) throws IOException {
System.out.println(convert("45{"));
System.out.println(convert("45A"));
System.out.println(convert("45B"));
System.out.println(convert("45}"));
System.out.println(convert("45J"));
System.out.println(convert("45K"));
}
public static long convert(String str){
String alphabet = "{ABCDEFGHI}JKLMNOPQR";
Map<String,String> map = Pattern.compile("")
.splitAsStream(alphabet)
.collect(Collectors.toMap(k->k, k->String.valueOf(alphabet.indexOf(k)%10)));
boolean isNegative = false;
if(Pattern.compile("[J-R\\}]+").matcher(str).find()){
isNegative = true;
}
for(String letter : alphabet.split("")){
str = str.replace(letter, map.get(letter));
}
long result = Long.parseLong(str);
return isNegative ? - result: result;
}