我有一个小程序,可以计算lexemes。我得到的是一个erorr。我对Java很新。这是错误:
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行是:while(s.charAt(右)!=分隔符){
某些原因字符串s只是一个
非常感谢任何帮助。
答案 0 :(得分:1)
好吧,你的字符串(s
)不包含空格(你赋予delimiter
的值)然后你这样做:
while (s.charAt(right) != delimiter) {
right++;
}
因此飞越你的弦乐结束。
while (s.charAt(right) != delimiter && s.length > right)
会照顾好。
编辑:帮助输入字符串
你正在打电话
String s = scanner.next();
Scanner
是输入解析器。这将返回输入的第一个单词(“a”),因为默认分隔符是空格。
如果您想要使用整个输入行:
String s = scanner.nextLine();