【问题标题】:Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0 isEmpty() or is.Blank() with char线程“main”java.lang.StringIndexOutOfBoundsException 中的异常:字符串索引超出范围:0 isEmpty() 或 is.Blank() with char
【发布时间】:2024-01-19 17:41:01
【问题描述】:

这个程序要求一个带有小写元音的字符串。如果它有一个小写元音,鹦鹉会重复这个字符串,但如果没有它会再次询问。

当字符串为空或空白时出现此错误。我知道 char 中的位置 0 是空的,但我不知道如何修复它。我应该使用带有字符串长度的for循环吗?

while (true) {
    System.out.println(
            "El lloro pregunta paraula que comenci amb vocal en minúscules");
    String paraula = Entrada.readLine();

    if (paraula.charAt(0) == 'a' 
            || paraula.charAt(0) == 'e' 
            || paraula.charAt(0) == 'i' 
            || paraula.charAt(0) == 'o'
            || paraula.charAt(0) == 'u') {
        System.out.println("El lloro diu: " + paraula);
    }

    if (paraula.isEmpty() || paraula.isBlank()) {
        break;
    }
}
System.out.println("Adéu");

【问题讨论】:

  • 在测试 charAt(0) 之前测试字符串是否为空、空或空白
  • 测试if(paraula.isEmpty() || paraula.isBlank())你已经在那个字符串上调用了要求它不为空的函数之后几乎没有意义。
  • 或者,您可以使用if (paraula.startsWith("a") 等处理空箱。

标签: java string char


【解决方案1】:
while(true){
    System.out.println("El lloro pregunta paraula que comenci amb vocal en minúscules");
    String paraula = Entrada.readLine();
    if(paraula.length()!=0 && "aeiou".indexOf(paraula.charAt(0))>=0)
        System.out.println("El lloro diu: " + paraula);
    if(paraula.isBlank()) // No need to check for empty String as you have checked it before
        break;
}
System.out.println("Adéu");

【讨论】:

  • indexOf 帮了我很多
  • 顺便说一句,如果我想检查字符串的最后一个元音,我应该使用 .endsWith() 吗?
  • 最后一个元音会是字符串的最后一个字符吗?
  • 是的,就像在这种情况下我正在检查第一个字符
  • @khandaniyal 您可以将startsWith("vowel") 用于以元音开头的字符串,您可以将endsWith("vowel") 用于以元音结尾的字符串。不要忘记把你的元音(字符)放在"vowel"
最近更新 更多