gpt4 book ai didi

java - 字符串索引超出范围,从文件输入的字符串

转载 作者:行者123 更新时间:2023-11-30 08:29:04 26 4
gpt4 key购买 nike

好的。我有一个没有问题的 try-catch block ,但问题是当我导入文本文件的第一行时,它说字符串索引超出范围:33。

那一行是“The Dentist Pulling My Tooth”我正在做的是使用 for 循环来评估一行中的每个字符,直到我们到达所述行的末尾。如果字符是元音,那么我增加一个元音整数。否则,如果它是一个空格,那么我将空格更改为波浪号 (~)。我想知道的是为什么它说我的字符串超出范围以及我如何将文本行中的空格从文件更改为波浪号。我可以自己弄清楚将它输出到不同的文件(这是我必须做的)。我只是很困惑为什么它说它超出范围。我在下面粘贴了我的整个程序。

该程序的目标是逐个字符地评估文本文件,并计算元音的数量。此外,我必须将任何空格更改为波浪号,然后重新输出到不同的文本文件。

代码如下:

import java.io.File;
import java.util.Scanner;
import java.io.IOException;
import java.io.FileWriter;

public class Vowels {

public static void main(String[] args) {
Scanner inFile;
File dentist = new File("poetry.txt");
int vowels = 0;

try {

for (int i = 0; i >= 0; i++) {
inFile = new Scanner(new File("poetry.txt"));
String str1 = inFile.nextLine();
for (int a = 0; a >= 0; a++) {

String start;
start = str1.substring(a, a + 1);

if (start.equalsIgnoreCase("a") == true)
vowels++;
else if (start.equalsIgnoreCase("e") == true)
vowels++;
else if (start.equalsIgnoreCase("i") == true)
vowels++;
else if (start.equalsIgnoreCase("o") == true)
vowels++;
else if (start.equalsIgnoreCase("u") == true)
vowels++;
else if (start.equalsIgnoreCase(" "))
start = " ";

}
}
} catch (IOException i) {
System.out.println("Error");
}

}
}

最佳答案

你应该乘坐new Scanner退出循环,然后将循环更改为 while(inFile.hasNextLine()) ...您根本没有使用“i”。

此外,您的内部循环永远不会结束,这就是您获得索引异常的原因。而不是 a>=0 , 将其替换为 a<str1.length() .

str1.charAt(a) 替换那个子字符串,然后使用简单的 == 将该字符(不是字符串)与单引号字符进行比较... 'a'、'e'、'i' 等。 char 是原生数据类型,所以你可以做 Character.toLowerCase(start) == 'a'请注意,我在比较之前强制字符为小写,这取代了“忽略大小写”。您不必执行 Character.toLowerCase每次如果你只是说start = Character.toLowerCase(start)虽然。

关于java - 字符串索引超出范围,从文件输入的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19762141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com