【问题标题】:How to accept user string input then convert to char and print this out?如何接受用户字符串输入然后转换为 char 并打印出来?
【发布时间】:2015-10-05 10:21:12
【问题描述】:

我正在尝试找到一种可以让用户输入字符串的方法,例如“你好,我的名字是 blobby 先生”然后将其分解为单独的字符并打印出来,这样它就会像这样打印出来:
{'H', 'e', 'l', 'l', 'o', 'm', 'y'}

到目前为止我有这个:

字符串用户输入字符串;

        HashMap hm = new HashMap();
        Scanner userInput = new Scanner( System.in );
        System.out.println("Type a string: ");
        userInputString = userInput.next();

        char ui = userInputString.charAt(0);
        char[] ui_arr = userInputString.toCharArray();

        for(int i=0;i<ui_arr.length;i++){
            System.out.print(String.valueOf(ui_arr[i]));

这会获取用户的输入并将其打印出来。但是,我希望它们以逗号分隔打印,而不是输入它们。 谢谢

【问题讨论】:

  • 如果您不知道某个 API/方法的工作原理,您应该开始学习的一件事是阅读 JavaDoc。所以我建议你阅读这两个文档:PrintStream#printlnScanner#next(奖励:Scanner#nextLine)。
  • 使用 System.out.print 而不是 println。 “ln”的意思是“新线”。因为当您使用扫描仪时,您应该告诉 userInput 变量读取 nextLine() 而不是 next() 参数。默认情况下,当您调用 next() 作为参数时,它会通过“空格”字符分割您的输入。

标签: java string chars


【解决方案1】:

您可以使用 Streams API 将字符串中的字符用, 连接起来。

Scanner userInput = new Scanner( System.in );
// read a whole line instead of a word.
// split into all characters and turn into a Stream
// join all the chaarcters with a `,` between them.
System.out.println(Stream.of(userInput.nextLine().split("", -1))
                         .collect(Collectors.joining(",")));

【讨论】:

    【解决方案2】:

    所以我在您的代码中看到了几个错误。

    HashMap hm = new HashMap(); 
    

    这条线没用。你不会在任何地方使用 hm。

    Scanner userInput = new Scanner( System.in ); 
    System.out.println("Type a string: "); 
    

    好的

    userInputString = userInput.next(); 
    

    next() 方法只读取到下一个空格。你想使用nextLine(),它会读取整行。

    char ui = userInputString.charAt(0); 
    

    我也没有看到你在哪里使用它...?

    char[] ui_arr = userInputString.toCharArray(); 
    

    好的

    for(int i=0;i<ui_arr.length;i++){
        System.out.println(String.valueOf(ui_arr[i]));
    }
    

    又是错误的方法,println() 打印字符,然后是换行符,即之后按 Enter。你想使用print()。除此之外,您不需要将char转换为String,您可以立即打印一个char(即System.out.print(ui_arr[i]);)。

    如果你想用逗号分隔字符,你需要使用print(ui_arr[i] + ", ")。这将打印字符,然后是,。为了使它更好,你需要检查你的代码是否是最后一个字符,然后省略打印,

    所以总的来说,我建议这样做:

    Scanner userInput = new Scanner(System.in);
    System.out.println("Type a string: ");
    String userInputString = userInput.nextLine();
    
    char[] ui_arr = userInputString.toCharArray();
    
    for(int i=0; i<ui_arr.length; i++){
        System.out.print(ui_arr[i]);
        if(i < ui_arr.length - 1){
            System.out.print(", ");
        }
    }
    

    【讨论】:

    • 选项是:Arrays.deepToString(ui_arr.toArray()) 然后删除 []
    • 我同意,但从他的帖子来看,我们应该尽可能简单地使用初学者已知的方法。
    • @Marcel "选项是:Arrays.deepToString(ui_arr.toArray()) 然后删除[]" ...您应该重新考虑该评论。首先toArray() 方法从何而来?为什么要使用deepToString?你在哪里看到二维数组?
    • 你说得对,我习惯使用列表和地图,而不是数组。 toArray() 是不必要的,toString() 也可以满足您的需求,但是我更喜欢 deepToString() 因为您可以随时使用它。
    • 但这暗示了传递参数的某些内容,它无法实现。但是,是的,它会起作用。
    【解决方案3】:

    写这个:

    Scanner userInput = new Scanner( System.in );
            System.out.println("Type a string: ");
            char[] userInputString = userInput.nextLine().toCharArray();
    
           for(int i = 0; i < userInputString.length; i++){
               if(!String.valueOf(userInputString[i]).equals(" "))
                   System.out.print(userInputString[i]+",");
           }
    

    您也可以使用 if 条件添加您不想打印空间的条件。

    【讨论】:

    • 您也可以使用带有打印的 System.out.println 编辑您的答案。因为他想打印我们的接近以前的。
    【解决方案4】:

    使用 userInput.nextLine() 而不是 userInput.next() 然后您可以根据需要格式化您的字符串,然后打印它。 只需注意 javadoc 即可了解函数的具体作用。

    这是一个例子:

        Scanner userInput = new Scanner(System.in);
        System.out.println("Type a string: ");
        String userInputString = userInput.nextLine();
    
        char[] ui_arr = userInputString.toCharArray();
    
        StringBuffer sb = new StringBuffer("{");
        for (char c: ui_arr) {
            sb.append(c);
            sb.append(",");
        }
        // delete the last comma
        sb.deleteCharAt(sb.length() -1);
        sb.append("}");
        System.out.println(sb.toString());
    

    你可以在 for 循环中做任何你想做的事情,例如忽略空格字符或其他东西

    希望有帮助

    【讨论】:

      【解决方案5】:

      只需要字符串就可以轻松完成给定的任务,无需将其转换为 char 数组然后单独打印。

      只需从头到尾迭代字符串(它的长度), 如果字符是空格,则忽略, 否则打印它。 System.out.println() 打印内容,后跟换行符, System.out.print() 仅打印内容。 修改代码:

      Scanner userInput = new Scanner( System.in );
          System.out.println("Type a string: ");
          String userInputString = userInput.nextLine();
      
          for(int i=0;i<userInputString.length();i++){
              if(userInputString.charAt(i)!=' ')
              System.out.print(userInputString.charAt(i)+" ");
          }
      

      在此处输入代码

      如果你真的想把字符串转换成 char 数组并且输出应该完全匹配 像 {'H', 'e', 'l', 'l', 'o', 'm', 'y'}。 1.删​​除字符串中的所有空格。 2. 将其转换为数组。 3. 打印数组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-20
        • 1970-01-01
        • 2019-04-11
        • 2015-12-19
        • 2018-09-18
        • 2013-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多