-1

实际上我是java的初学者

我想知道如何编写一个在替换一些字母后打印字符串的程序。

例如,

我爱 = 1 L0v3

冬天来了 = W1nt3r 1s c0m1ng

我想更换:

  • A4,
  • E3,
  • I1,
  • 和. O_0

我坚持使用该代码:

import java.util.Scanner;
public class question2 {
    public static void main(String[] args) {
        Scaneer sc = new Scanner(System.in);
        System.out.println("Enter a string :");
        String original = sc.readLine();
        String replaced = "stuff";
        System.out.printlb(original + " = " + replaced);
    }
}
4

5 回答 5

1

一些用户建议使用String#replaceAll(). 它可以工作,但是您将在每个要替换的字符上迭代一次字符串。

我建议你在数组上循环(使用String.toCharArray())并使用StringBuilder.

Map<Character, Character> map = new HashMap<Character, Character>(); // <-- Store the mapping into a map;
map.put('3','e');
map.put('4','a');
...

//Then, create a StringBuilder. It allows you to build a String...
StringBuilder sb = new StringBuilder();

//Then loop on your String : 
for(char c :  yourString.toCharArray()) {
  if(map.containsKey(c)) {
    sb.append(map.get(c));
  } else {
    sb.append(c);
  }
}

System.out.println("the result is "+sb.toString());
于 2013-10-06T20:25:11.917 回答
1

有一种方法String.replaceAll(String regex,String replacement)可以完全满足您的要求。

示例用法:

String word = "Winter";
word = word.replaceAll("i","1");
System.out.println(word); //Outputs 'W1nter'.

请记住,这是区分大小写的(因此替换 a 不会替换 A)。

通过使用更好的正则表达式和缓存正则表达式可以使事情变得更有效率,但我不会深入探讨,因为你是初学者。随意谷歌“java缓存正则表达式”。

于 2013-10-06T20:02:42.303 回答
1

这将替换所有字符,忽略大写和小写。这(?i)是不区分大小写的正则表达式。

String convertMe = "winter is coming";

convertMe = convertMe.replaceAll("(?i)a", "4")
            .replaceAll("(?i)e", "3")
            .replaceAll("(?i)i", "1")
            .replaceAll("(?i)o", "0");

System.out.println(convertMe); //Prints: w1nt3r 1s c0m1ng
于 2013-10-06T20:15:04.537 回答
0

您应该将替换编码为字符,而不是整数,因为您将在string中替换它们。举个例子:

System.out.println("Hello".replace('e', '3')); // Will print "H3llo"

注意它'3'是一个字符,而不是一个整数。然后,您将对要替换的所有值执行此操作。

于 2013-10-06T20:03:06.910 回答
0

对于 Java 8 或更高版本:

import java.util.Map;
import java.util.HashMap;

class Main {
    public static void main(String[] args) {
        Map<Character, Character> map = new HashMap<>() {{
            put('A', '4');
            put('E', '3');
            put('I', '1');
            put('O', '0');
        }};
        String original = "WINTER IS COMING";
        String replaced = map.entrySet().stream().reduce(original, (acc, e) -> acc.replace(e.getKey(), e.getValue()), (s1, s2) -> s1 + s2);
        System.out.println(replaced); // W1NT3R 1S C0M1NG
    }
}
于 2021-05-21T10:52:10.027 回答