我有一個小程序可以計算詞位。我得到的是一個錯誤。我對Java相當陌生。以下是錯誤:Count lexemes - 字符串越界異常
c:\programming>java LexemesTokenizer
input string: a = ++b; c = d - /* -e */ --f;
Input string= a
Delimeter= .
Total number of delimeters= 2 Exception in thread "main" java.lang.StringIndexOu
tOfBoundsException: String index out of range: 2
at java.lang.String.charAt(Unknown Source)
at LexemesTokenizer.main(LexemesTokenizer.java:41)
這裏是代碼
import java.util.Scanner;
public class LexemesTokenizer {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("input string: ");
String s = scanner.next();
char delimiter = ' ';
// calculate number of delimiter characters
int cntDelimeters = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) != delimiter) {
cntDelimeters++;
}
}
System.out.println("Input string= " + s);
System.out.printf("Delimeter= %c.", delimiter);
System.out.printf("\nTotal number of delimeters= %d ", cntDelimeters);
String[] lexemes = new String[cntDelimeters + 1];
// parse cntDelimeters+1 lexemes and store in an array
int right = 0;
int left = 0;
for (int i = 0; i < cntDelimeters; i++) {
while (s.charAt(right) != delimiter) {
right++;
}
lexemes[i] = s.substring(left, right);
right++;
left = right;
}
lexemes[cntDelimeters] = s.substring(right, s.length());
// print results for testing
for (int i = 0; i < lexemes.length; i++) {
System.out.printf("\n%d : %s", i, lexemes[i]);
}
}
}
線41:而(!s.charAt(右)=分隔符){
一些字符串s的原因是隻有一個
任何幫助,非常感謝。
你指出線41請爲我們,所以我們不必算? – 2011-04-18 02:26:33
在你說你「/ /計算分隔符字符數」的部分,你似乎在計算實際上不是分隔符的字符數。在遞增「cntDelimiters」變量之前查看您使用的比較。不知道,如果這與你的錯誤有任何關係。 – Cephron 2011-04-18 02:36:00
@Greg - 我添加了第41行。謝謝 – Steller 2011-04-18 02:42:41