我正在编写一个计算文本文件中单词数量的程序,但只计算其中包含2个以上字符的单词。它之前工作正常,但突然间我收到了错误
线程“main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:269?
有人可以帮忙吗?
import java.io.*;
class count_words {
public static int countWords(String str)
{
int count = 1, num_of_letters = 0, final_count=1;
for (int i=0;i<=str.length()-1;i++)
{
if (str.charAt(i) == ' ' && str.charAt(i+1)!=' ')
{
if(num_of_letters <= 2)
{
count --;
}
System.out.println("count is " + num_of_letters);
num_of_letters = 0;
count++;
}
else if(str.charAt(i) == ',')
{
num_of_letters --;
}
else
{
num_of_letters++;
}
}
return count;
}
public static void main(String[] args){
//name of file to open
String fileName = "/Users/Chris/Desktop/comp 1 McPhee.txt";
//reference one line at a time
String line = null;
int num;
try
{
//Filereader reads text file in the default encoding.
FileReader filereader = new FileReader(fileName);
BufferedReader bufferedreader = new BufferedReader(filereader);
while ((line = bufferedreader.readLine()) != null)
{
num = countWords(line);
System.out.println(num);
}
}
//Always close file
catch(FileNotFoundException ex)
{
System.out.println("Unable to open file '" + fileName + "'");
}
catch(IOException ex)
{
System.out.println("Error reading file '" + fileName + "'");
}
}
}
答案 0 :(得分:0)
问题的根源在这里。
<fieldset class="form-group">
<legend>Rating system</legend>
<div class="form-check" *ngFor="let rating of ratingSystem">
<label class="form-check-label" (mouseenter)="currentRatingId = rating.id">
<input
type="radio"
class="form-check-input"
name="ratingsRadio"
[value]="rating.id"
[(ngModel)]="movie.rating.id"
required
/>
{{rating.short_tag}}
</label>
<small [hidden]="currentRatingId !== rating.id"> – {{rating.description}}</small>
</div>
</fieldset>
因为你让我一直走到str.length() - 1,str.charAt(i + 1)将超过最后一个索引位置。
单词&#34;拍摄&#34;
str.length()= 5;
指数位置0-4。
当我是4时,src.charAt(i + 1)将为5。
我认为这会解决它。
public static int countWords(String str)
{
int count = 1, num_of_letters = 0, final_count=1;
for (int i=0;i<=str.length()-1;i++)
{
//This line
if (str.charAt(i) == ' ' && str.charAt(i+1)!=' ')
答案 1 :(得分:0)
因为使用str.charAt(i + 1)!=''而得到异常。如果i为0且字符串的长度为1,则i + 1将尝试在位置1处找到将抛出异常的元素。您可能需要添加条件以检查i之前是否小于(数组-1的长度)。