【问题标题】:replace characters, one input multiple words替换字符,一输入多字
【发布时间】:2021-06-21 20:10:50
【问题描述】:

我想出了一种将元音替换为 * 的方法,但它只转换第一行

输入: 休息 罗伯特 是的

输出: br**k

这里是代码

public class Solution {

    public static void main(String[] args) {
        String enterWord;
        Scanner scan = new Scanner (System.in);
        enterWord = scan.nextLine();
        enterWord = enterWord.replaceAll("[aeiou]", "*");
        
    System.out.println(enterWord);
    }
}

有什么方法可以读取所有三个单词?

【问题讨论】:

  • 输入是单行吗? break robert yeah 在同一输入行上吗?如果是,那么您的代码在我的环境中提供br**k r*b*rt y**h。如果不是,则将来自scan.nextLine(); 的 3 行放入一个循环中。

标签: java string replaceall


【解决方案1】:

您的代码在我的环境(Windows10,java1.8.0_271)上按您的意愿工作(输入:break robert 是的:br**kr*b*rt y**h),也许您可​​以在 @ 上设置断点987654321@ 和检查是enterWord 接收的整个输入字符串。

【讨论】:

    【解决方案2】:

    您需要一个循环来继续获取和处理输入。另外,我建议您将(?i) 与正则表达式一起使用以使其成为case-insensitive

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            String enterWord, answer = "y";
            Scanner scan = new Scanner(System.in);
            do {
                System.out.print("Enter a word: ");
                enterWord = scan.nextLine();
                enterWord = enterWord.replaceAll("(?i)[aeiou]", "*");
                System.out.println("After replacing vowels with * it becomes " + enterWord);
                System.out.print("Do you wish to conntinue[y/n]: ");
                answer = scan.nextLine();
            } while (answer.equalsIgnoreCase("y"));
        }
    }
    

    示例运行:

    Enter a word: hello
    After replacing vowels with * it becomes h*ll*
    Do you wish to conntinue[y/n]: y
    Enter a word: India
    After replacing vowels with * it becomes *nd**
    Do you wish to conntinue[y/n]: n
    

    对于跨越多行的单个字符串,String#replaceAll 方法适用于整个字符串,如下所示:

    public class Main {
        public static void main(String[] args) {
            String str = "break\n" + 
                        "robert\n" + 
                        "yeah";
            System.out.println(str.replaceAll("(?i)[aeiou]", "*"));
        }
    }
    

    输出:

    br**k
    r*b*rt
    y**h
    

    使用此功能,您可以交互构建一串多行,最后将所有元音更改为*

    演示:

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            String text = "";
            Scanner scan = new Scanner(System.in);
            StringBuilder sb = new StringBuilder();
            System.out.println("Keep enter some text (Press Enter without any text to stop): ");
            while (true) {
                text = scan.nextLine();
                if (text.length() > 0) {
                    sb.append(text).append(System.lineSeparator());
                } else {
                    break;
                }
            }
    
            System.out.println("Your input: \n" + sb);
            String str = sb.toString().replaceAll("(?i)[aeiou]", "*");
            System.out.println("After converting each vowel to *, your input becomes: \n" + str);
        }
    }
    

    示例运行:

    Keep enter some text (Press Enter without any text to stop): 
    break
    robert
    yeah
    
    Your input: 
    break
    robert
    yeah
    
    After converting each vowel to *, your input becomes: 
    br**k
    r*b*rt
    y**h
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-25
      • 2020-07-12
      • 2020-08-05
      • 1970-01-01
      • 2015-03-15
      • 2014-08-31
      • 2011-07-01
      • 2016-11-05
      相关资源
      最近更新 更多