【问题标题】:String to char issue字符串转字符问题
【发布时间】:2016-09-26 23:03:49
【问题描述】:

我正在尝试编写一个简单的程序来计算用户输入的字符串中元音、辅音和空格的数量。我的 do while 循环和 if 语句有问题。它将所有内容都视为一个空格,而不是元音或辅音。如果你们有任何建议,请告诉我! :)

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import javax.swing.JOptionPane;

public class VowelCounter {

private static final Set<String> 
        vowels = new HashSet<>
        (Arrays.asList("a","e","i","o","u","y"));

private static final Set<String> 
        cons = new HashSet<>
        (Arrays.asList("b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","z"));

public static void main(String[] args) {

    // ---------------------------------------------- VARIABLE DECLARATIONS
    int vnum = 0;
    int snum = 0;
    int cnum = 0;
    int i = 0;


    // -------------------------------------------------------------- INPUT
    String input = JOptionPane.showInputDialog
        ("Enter name (like your university)");
    // --------------------------------------------------------- PROCESSING
    char result = input.charAt(i);

    do{
        if (vowels.contains(result))
            vnum++;

        if (cons.contains(result))
            cnum++;

        if (!input.matches(("[a-zA-Z]+")))
            snum++; 


        i++;
    }while (i < input.length());

    System.out.println("There are " + vnum + " vowels, " + cnum + " consonants, and " + snum + "spaces");

【问题讨论】:

  • 我不太熟悉,但你的regex 一定是错的。为什么不直接说if (input.equals(" "))
  • 你只使用字符串的第一个字符:在循环内移动char result = input.charAt(i);
  • 您对“非字母”的测试是错误的:它适用于整个输入,因为它是 +,它会尽可能多地吃掉。

标签: java


【解决方案1】:
  1. 你不会在Set&lt;String&gt; 中找到char

  2. 在您的循环中,您增加了i,但没有选择相应的字符。

  3. 您不必要地(并且不正确地)使用正则表达式,而简单的else 就足够了。

试试这个:

private static final Set<Character> 
        vowels = new HashSet<>
        (Arrays.asList('a','e','i','o','u','y'));

private static final Set<Character> 
        cons = new HashSet<>
        (Arrays.asList('b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z'));

...

    for (int i = 0; i < input.length(); i++) {
        Character result = input.charAt(i);
        if (vowels.contains(result))
            vnum++;
        else if (cons.contains(result))
            cnum++;
        else
            snum++;
    }

【讨论】:

  • 就是这个。我会把我的 cmets 拿回来。
【解决方案2】:

您的循环永远不会修改result,因此它始终是第一个字符输入。

【讨论】:

    猜你喜欢
    • 2016-05-26
    • 1970-01-01
    • 2023-03-31
    • 2017-07-12
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    相关资源
    最近更新 更多