用多个不同的字符

时间:2017-05-01 13:23:41

标签: java regex string replace binary

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

例如,我会输入" 3"并且代码将数字转换为" 11",这是" 3"的二进制表示。代码将继续转换为" 11"到了#34;一个"将被输出。

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

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);
        }
    }
}

我尝试使用带有正则表达式[1,0]的replaceAll函数,我认为它会将(都是?)1和0转换为下一个字段中指定的序列。

我想将每1转换为&#34; 1&#34;并且每0到a&#34;零&#34;。

感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:4)

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

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

示例:

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

<强>输出

110111
one one zero one one one 

一年多后编辑。

作为@Soheil Pourbafrani在评论中询问,是否可以只遍历字符串一次,是的,你可以,但你需要使用这样的循环:

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 +

如果您使用的是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