我认为这个问题对于经验丰富的程序员来说并不是很复杂,但我对此很陌生,所以我很挣扎。 我在 java 类之前声明了一个分隔符列表,如下所示:
public static final String DELIMITERS = ",<.>/?;:'\"[{]}\\|=+-_)(*&^%$#@!`~ \t\n";
我想创建一个带有两个参数(起始索引和字符串)的方法。目标是读取字符串并返回与不在上面给出的分隔符列表中的字符相对应的下一个索引。如果起始索引为负数或大于文本长度,则该方法应简单返回 -1。否则,它只返回不在分隔符列表中的下一个字符的索引。 这是我到目前为止所拥有的:
public static boolean isDelimiter(char c) {
String letter = "" + c;
if(DELIMITERS.contains(letter)){
return true;
}
else{
return false;
}
}
public static int posNextWord(int startPosition, String text) {
boolean isWord = false;
int nextWordPosition = 0;
if(startPosition < 0 || startPosition > (text.length()-1)){
return -1;
}
else{
while(isWord = false) {
for (int i = startPosition; i < text.length(); i++) {
if(!isDelimiter(text.charAt(i))){
nextWordPosition = nextWordPosition + i + startPosition;
isWord = true;
}
else{
isWord = false;
}
}
}
return nextWordPosition;
}
}
}
但是,当我使用示例文本和索引运行该程序时,该方法仅返回数字 0。任何帮助都将不胜感激。另外,在 posNextWord() 方法中需要使用 isDelimiter 方法。
最佳答案
这整个代码块就是问题所在:
while(isWord = false) {
for (int i = startPosition; i < text.length(); i++) {
if(!isDelimiter(text.charAt(i))){
nextWordPosition = nextWordPosition + i + startPosition;
isWord = true;
}
else{
isWord = false;
}
}
}
return nextWordPosition;
首先,您只需要一个循环来检查循环的每个字符。您不需要 while
和 for
。其次,如果你想找到第一个不匹配的char
,找到后直接返回即可。
像这样:
for (int i = startPosition; i < text.length(); i++) {
if(!isDelimiter(text.charAt(i))){
return i + startPosition;
}
}
return -1;
关于JAVA :How to determine the index of the next character in a string NOT equal to a set of delimiters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42430677/