有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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)

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


共 (2) 个答案

  1. # 1 楼答案

    通过这个测试:

    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;
    }
    
  2. # 2 楼答案

    终于,我得到了答案

    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();
    
            if(Character.isLetter(s.charAt(0)) || Character.isLetter(s.charAt(s.length()-1)))
                return false;
    
            for(int i=1;i<s.length();i++){
                if(Character.isLetter(s.charAt(i)) && (s.charAt(i-1)!='+' || s.charAt(i+1)!='+'))
                    return false;
            }
    
            return true;
    }
    
    }