java中的SimpleSymbols字符串
我是java初学者,我有一个问题:
编写一个包含方法SimpleSymbols(str)的java程序,获取正在传递的str参数,并通过返回字符串true或false来确定它是否是可接受的序列。str参数将由+和=符号组成,它们之间有几个字母(即++d++==+c++==a),为使字符串为真,每个字母必须由+符号包围
样本测试用例:
输入:“+d+=3=+s+”
输出:“真”//as+d+和+s+被+
输入:“f++d+”
输出:“false”//as f+未被+
这是我的代码:
package simplesympoles;
import java.util.Scanner;
public class SimpleSympoles {
static Scanner input= new Scanner(System.in);
public static void main(String[] args) {
for (int i = 0; i <2; i++) {
System.out.println("Enter a string: ");
String s=input.next();
System.out.println(SimpleSymbols(s));
}
}
public static boolean SimpleSymbols(String s){
String s1=s.trim();
for (int i = 0 ; i <s.length(); i++)
if (s1.charAt(i+1)=='+'&&s1.charAt(i-1)=='+' && Character.isLetter(s1.charAt(i)))
return true;
return false;
}
}
当我输入的字符串是make the method returns true时,它运行良好,但当我输入的字符串没有检测到条件时,它不会返回false,但是发生了运行时错误,我尽了最大努力来修复它,但我做不到
以下是我的跑步记录:
Enter a string:
+d+=3=+s+
true
Enter a string:
f++d+
Exception in thread "main"
java.lang.StringIndexOutOfBoundsException: String index out of range:
-1 at java.lang.String.charAt(String.java:658) at simplesympoles.SimpleSympoles.SimpleSymbols(SimpleSympoles.java:26)
at simplesympoles.SimpleSympoles.main(SimpleSympoles.java:14)
/Users/Zahraa_maher/Library/Caches/NetBeans/8.2/executor-snippets/run.xml:53:
Java returned: 1 BUILD FAILED (total time: 21 seconds)
我需要你的帮助来解决这个问题,非常感谢
# 1 楼答案
通过这个测试:
你的意思是,如果你发现一个字母两边都有
+
符号,那么这个字符串就是有效的。但是每个字母都必须被一个+
包围,所以你需要切换逻辑,而是这样做然后,如果到达字符串末尾时没有返回false,则知道该字符串有效,并且可以返回true
此外,如果你想前后看一个字符,那么你不能从第一个字符开始,也不能转到最后一个字符,否则你会得到一个
StringIndexOutOfBoundsException
。相反,你的循环应该是这样的:显然,您确实需要检查第一个和最后一个字符,但我们可以在一开始就检查,因为如果其中任何一个是字母,则字符串无效
综上所述,我们得到:
# 2 楼答案
终于,我得到了答案