有没有更好的方法来写s.substring,所以我的代码在拥有一个字符时不会失败

时间:2019-01-17 10:42:05

标签: java

在将“ Hello”作为我的字符串时,我的输出是“ He”。将“ He”写为我的字符串时,输出也为“ He”。我添加了一段代码,指出当字符串大于一个字符时,它应该只打印字符本身。

这似乎很基本,但是当只给一个字符(例如“ H”)作为字符串时,我不知何故出现了错误。它说:String index out of range: 2

public static void main(String[] args) {

    String s = "o";
    String s1 = s.substring(0,2);


    if (s.length() >= 1 ) 
    {
    System.out.println(s);    
    }
    else 
    {
    System.out.println(s1);    
    } 

}

}

4 个答案:

答案 0 :(得分:11)

替代:

s.substring(0, Math.min(2, s.length()))

答案 1 :(得分:3)

您需要在致电String.substring()之前进行检查。您可以使用三元运算符? :来简化代码:

String s = "a"
String o = s.substring(0, s.length() > 2 ? 2 : s.length());
System.out.println(o); // a

答案 2 :(得分:2)

当字符串仅包含一个字符时,您仍然运行String s1 = s.substring(0,2);,它将尝试访问第二个字符,并且会出现超出范围的异常。

您可以将代码编写为:

 String s = "o";
 String s1 = s;


if (s.length() > 2) {
    s1 = s.substring(0,2);
}
System.out.println(s1);    

这样,只有当s的字符数超过2个时,您才创建它的子字符串。

答案 3 :(得分:1)

请检查以下代码

class test {
 public static void main(String[] args) {

  String s = "o";

  if (s.length() <= 1) {
   System.out.println(s);
  } else {
   String s1 = s.substring(0, 2);
   System.out.println(s1);
  }

 }
}

我们不能有一个长度大于提供的字符串长度的子字符串,因此会出现这些错误。