获得两个字符串中最长的一个

时间:2011-11-14 13:51:41

标签: java string

有没有快速的方法来选择两个字符串中较长的一个?我想绕开必须做的事情

if(string1 > string2)
  do a;
else if(string2 > string1)
  do b;

9 个答案:

答案 0 :(得分:7)

字符串有一个方法length,您可以使用:

if(string1.length() > string2.length())
  do a;
else if(string2.length() > string1.length()
  do b;

编辑:我误解了你的问题。这是使用三元运算符编写它的较短方式:

String longest = (string1.length() > string2.length()) ? string1 : string2;

我不知道你为什么要寻找一种更短的编写方式,因为你的原始方式提供了比使用三元运算符更多的可读性。如果原因是你要多次获得最长的字符串,我建议将比较提取到一个返回最长字符串的方法。 E.g:

public String getLongestString(String s1, String s2) {
   if(s1.length() > s2.length())
      return s1;
   else
      return s2;
}

答案 1 :(得分:2)

如果你关心它是否是平局,你需要做两个比较。

如果你不在乎它是否平局,你可以放弃第二次比较。然后平局将与第二个字符串更长相同。

答案 2 :(得分:2)

如果你的doA()或doB()返回相同超类型的值,你总是可以使用三元组:

final Object result = string1.length() > string2.length() ? doA() : doB();

答案 3 :(得分:1)

相反if(string1 > string2)你应该像

一样
if(length(string1) >= length(string2))

答案 4 :(得分:1)

由于您将使用较长的字符串,这可能会起到作用:

String s1 = "a";
String s2 = "bb";
String longer;
longer = s1.length() > s2.length()? s1: s2.length() > s1.length()? s2:null;
if (longer != null) System.out.println("longer string: " + longer);

但出于可读性原因,我更愿意使用这两个if。

答案 5 :(得分:0)

if(string1.length() > string2.length()) {
  //do a
}
else {
  //do b
}

答案 6 :(得分:0)

我相信不,但你可以稍微简化一下:

if (s1.length() >= s2.length()) {
    // do a
} else {
    // do b
}

答案 7 :(得分:0)

其他人已经指出了三元是否,所以这里是另一种解决方案。

请注意,我并不主张它,因为可读性可能比原始代码更差。我只是列出了不同的选项。

您可以尝试以下几行:

// Math.signum works on doubles or floats, and returns double or float,
// so we need to cast it to int, because switch wants it 
int diff = (int) Math.signum(string1.length() - string2.length()); 

switch (diff) {
    case  1: do_A(); break;
    case -1: do_B(); break;
    default: break; // do nothing
}

答案 8 :(得分:-2)

您的代码无效。您不能将><直接等同于字符串。

if(string1.length() > string2.length())
{
    // string1 is longer
}
else if(string2.length() > string1.length())
{
    // string2 is longer
}

无论如何,你不能写得更短,也不能用于可读性目的。