有没有快速的方法来选择两个字符串中较长的一个?我想绕开必须做的事情
if(string1 > string2)
do a;
else if(string2 > string1)
do b;
答案 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
}
无论如何,你不能写得更短,也不能用于可读性目的。