用多个不同的字符替换String中的多个字符

时间:2023-01-22 16:52:14

I am working on a code that will convert binary digits to its corresponding value in words.

我正在编写一个代码,将二进制数字转换为单词中的相应值。

For example, I would input "3" and the code will convert the number to "11", which is the binary representation of "3". The code will proceed to convert that "11" to "one one" which will be outputted.

例如,我输入“3”,代码将数字转换为“11”,这是“3”的二进制表示。代码将继续将“11”转换为“一个”,这将被输出。

I have already wrote the binary conversion part, but I am having difficulty converting it to words.

我已经编写了二进制转换部分,但我很难将其转换为单词。

public class BinaryWords {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        String S = sc.nextLine(); //how many times the for loop will repeat
        for (int i = 0; i < S.length() + 1; i++) {
            int A = sc.nextInt(); //input the number
            String convert = Integer.toBinaryString(A); //converts the number to binary String
            String replace = convert.replaceAll("[1 0]", "one, zero "); //replaces the String to its value in words
            System.out.println(replace);
        }
    }
}

I tried using the replaceAll function with the regex [1, 0], which (I think) will convert (both?) 1 and 0 to the sequence specified in the next field.

我尝试将replaceAll函数与regex [1,0]一起使用,我认为它会将(两个?)1和0转换为下一个字段中指定的序列。

I would like to convert every 1 to a "one" and every 0 to a "zero".

我想将每1转换为“一”,每0转换为“零”。

Any help is appreciated, thanks!

任何帮助表示赞赏,谢谢!

1 个解决方案

#1


2  

You dont need to use regex, you can use two replace to solve your problem :

你不需要使用正则表达式,你可以使用两个替换来解决你的问题:

String replace = convert.replace("1", "one ").replace("0", "zero ");

Example :

int i = 55;
System.out.println(Integer.toBinaryString(i));
System.out.println(Integer.toBinaryString(i).replace("1", "one ").replace("0", "zero "));

Output

110111
one one zero one one one 

Edit after more than one year.

一年多后编辑。

As @Soheil Pourbafrani ask in comment, is that possible to traverse the string only one time, yes you can, but you need to use a loop like so :

正如@Soheil Pourbafrani在评论中提出的那样,只有一次可以遍历字符串,是的,你可以,但是你需要使用这样的循环:

before Java 8

int i = 55;
char[] zerosOnes = Integer.toBinaryString(i).toCharArray();
String result = "";
for (char c : zerosOnes) {
    if (c == '1') {
        result += "one ";
    } else {
        result += "zero ";
    }
}
System.out.println(result);
=>one one two one one one

Java 8+

Or more easier if you are using Java 8+ you can use :

或者如果您使用的是Java 8+则更容易使用:

int i = 55;
String result = Integer.toBinaryString(i).chars()
        .mapToObj(c -> (char) c == '1' ? "one" : "two")
        .collect(Collectors.joining(" "));
=>one one two one one one

#1


2  

You dont need to use regex, you can use two replace to solve your problem :

你不需要使用正则表达式,你可以使用两个替换来解决你的问题:

String replace = convert.replace("1", "one ").replace("0", "zero ");

Example :

int i = 55;
System.out.println(Integer.toBinaryString(i));
System.out.println(Integer.toBinaryString(i).replace("1", "one ").replace("0", "zero "));

Output

110111
one one zero one one one 

Edit after more than one year.

一年多后编辑。

As @Soheil Pourbafrani ask in comment, is that possible to traverse the string only one time, yes you can, but you need to use a loop like so :

正如@Soheil Pourbafrani在评论中提出的那样,只有一次可以遍历字符串,是的,你可以,但是你需要使用这样的循环:

before Java 8

int i = 55;
char[] zerosOnes = Integer.toBinaryString(i).toCharArray();
String result = "";
for (char c : zerosOnes) {
    if (c == '1') {
        result += "one ";
    } else {
        result += "zero ";
    }
}
System.out.println(result);
=>one one two one one one

Java 8+

Or more easier if you are using Java 8+ you can use :

或者如果您使用的是Java 8+则更容易使用:

int i = 55;
String result = Integer.toBinaryString(i).chars()
        .mapToObj(c -> (char) c == '1' ? "one" : "two")
        .collect(Collectors.joining(" "));
=>one one two one one one