Java 中的条件子串

Conditional substringing in Java

假设我有一种方法可以让前 3 个字符组成这样的字符串:

public static String makeThree(String a){
  return a.toLowerCase().substring(0, 3);
}

是否有任何 built-in/smart 方法来处理 StringIndexOutOfBoundsException 错误,即当向该方法提供仅包含 2 个字符的字符串时?在这种情况下,我希望它按原样 return。

我可以将它构建成这样的 if 语句:

public static String makeThree(String a){
  if (a.length < 3) {
    return a
  } else {
    return a.toLowerCase().substring(0, 3);
  }
}

但我只是想知道是否有更好的方法。

我唯一可以建议的是将其全部缩减为一行:

return (a.length < 3) ? a : a.substring(0,3).toLowerCase();

这与您的代码完全相同:

if (a.length < 3) {
    return a
} else {
    return a.toLowerCase().substring(0, 3);
}

我把别人的答案记下来,在子串操作后移动了.toLowerCase()。这可以防止不必要地更改随后将被丢弃的字母的大小写。

如果可以放宽不返回小于3个字符的小写String的要求,可以

public static String getFirst3Chars(String str) {
    return str.toLowerCase().substring(0, Math.min(3, str.length()));
}

我唯一推荐的建议包括:

toLowerCase 移动为第二个操作 - 在您的第一个 if 语句中,当 a.length < 3

时,您不会大写您的字符串

像这样:

String baseString = (a.length < 3) ? a : a.substring(0,3);
return baseString.toLowerCase();

没有专门的方法。您有这样的选择:

public static String makeThree(String a) {
    return a.substring(0, Math.min(3, a.length())).toLowerCase();
}

这也只会将您真正想要的子字符串转换为小写,而不是转换整个内容然后丢弃其余部分。

Java 在像这样的简单任务中可能会非常严格和冗长。有多个项目试图让开发人员的生活更轻松,代码更具可读性。最受欢迎的库之一是 Apache Commons and its commons-lang 库。我强烈建议阅读它的文档,看看它提供了什么并尝试解决。

对于您的用例,有一个非常方便的方法 StringUtils#left