gpt4 book ai didi

java - java中的SimpleSymbols字符串

转载 作者:行者123 更新时间:2023-12-02 10:44:40 25 4
gpt4 key购买 nike

我是java初学者,我有这个问题:

编写一个包含方法 SimpleSymbols(str) 的 Java 程序,该程序接受传递的 str 参数,并通过返回字符串 true 或 false 来确定它是否是可接受的序列。 str 参数将由 + 和 = 符号组成,它们之间有多个字母(即++d+===+c++==a),并且为了使字符串为真,每个字母必须被 + 符号包围。

示例测试用例:

输入:“+d+=3=+s+”

输出:"true"//+d+ 和 +s+ 被 + 包围

输入:“f++d+”

输出:"false"//因为 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 方法返回 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)

我需要您的帮助来解决这个问题,非常感谢您!

最佳答案

通过此测试:

if (s1.charAt(i+1)=='+'&&s1.charAt(i-1)=='+' && Character.isLetter(s1.charAt(i)))
return true;

你的意思是,如果你发现一个字母两边都有 + 符号,那么该字符串就是有效的。但是每个字母都必须被+包围,所以你需要切换逻辑,而是做

if (Character.isLetter(s1.charAt(i)) && (s1.charAt(i-1)!='+' || s1.charAt(i+1)!='+'))
return false;

然后,如果到达字符串末尾且没有返回 false,则说明该字符串有效并且可以返回 true。

此外,如果您想前后查看一个字符,则不能从第一个字符开始或转到最后一个字符,否则您将收到 StringIndexOutOfBoundsException。相反,你的循环应该如下所示:

for (int i = 1 ; i <s.length()-1; i++) 

显然,您确实需要检查第一个和最后一个字符,但我们可以在开始时执行此操作,因为如果它们中的任何一个是字母,则该字符串无效。

if(Character.isLetter(s1.charAt(0)) || Character.isLetter(s1.charAt(s1.length()-1)))
return false;

把这些放在一起我们得到:

public static boolean SimpleSymbols(String s){
String s1=s.trim();

if(Character.isLetter(s1.charAt(0)) || Character.isLetter(s1.charAt(s1.length()-1)))
return false;

for (int i = 1 ; i <s.length()-1; i++)
if (Character.isLetter(s1.charAt(i)) && (s1.charAt(i-1)!='+' || s1.charAt(i+1)!='+'))
return false;

return true;
}

关于java - java中的SimpleSymbols字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52675456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com