我收到了字符串比较的问题。我不得不编写一个方法来比较两个字符串,而不使用java的内置字符串比较方法。此外,它假设长约3-5行代码。该方法应返回0表示相等,1表示字符串'a'大于字符串'b',-1表示字符串'a'小于'b'
现在,我知道Java会根据每个字符的int
值来比较字符串,所以我尝试做这件事情,但这肯定不是3-5行代码:
public int compare(String s1, String s2){
int result = 0;
int count = 0; // The counter for the first string integer values sum
int count2 = 0; // The counter for the second string integer values sum
for(int c=0; c<s1.length(); c++){
count = count +s1.charAt(c);
}
for (int c2=0; c2<s2.length(); c2++){
count2 = count2 +s2.charAt(c2);
}
//***** some condition statement to check which is bigger and then return the result
答案 0 :(得分:4)
您是否考虑过进行简单的词典比较,而不是比较长度(或者您尝试做的任何事情,它并不是特别容易辨别):
for(int i=0; i<a.length() && i<b.length(); i++) {
if(a.charAt(i) != b.charAt(i))
return a.charAt(i) < b.charAt(i) ? -1 : 1;
}
return a.length() < b.length() ? -1 : a.length() == b.length() ? 0 : 1;
除了它只使用公共方法之外,它基本上与java.lang.String
所做的相同。
答案 1 :(得分:0)
考虑2个String
a
和b
解决方案可能是:
int comp = 0;
for(int i = 0; i < Math.min(a.length(), b.length()); i++)
if((comp = a.charAt(i) - b.charAt(i)) != 0)
return comp;
return a.length() < b.length() ? -1 : a.length() == b.length() ? 0 : 1;
计算同一位置中每个char
的差异,直到较小的String
长度,如果它们都是0
,则返回较小的String
。
编辑:我不知道下注的原因可能是,但无论如何快速测试它按预期工作(并且它的长度为5行)。
答案 2 :(得分:0)
我认为这种递归方法可能对您有用:
public static int compare(String a, String b, int pos){
if(a.charAt(pos) == b.charAt(pos) && pos >= a.length() && pos >= b.length())
return 0;
else if(a.charAt(pos) > b.charAt(pos))
return 1;
else if(a.charAt(pos) < b.charAt(pos))
return -1;
else {
pos++;
if(pos < a.length() && pos < b.length())
return compare(a,b,pos);
else if(pos < a.length() && pos >= b.length())
return 1;
else if(pos >= a.length() && pos < b.length())
return -1;
else return 0;
}
}
您必须使用compare
上的变量pos
在main上调用0
方法,如下所示:
public static void main(String[] args) {
String a = "azzz";
String b = "azz";
System.out.println("" + compare(a,b,0));
}
希望这有帮助。
答案 3 :(得分:0)
这是我的尝试。我测试了一下它似乎工作。如果没有,那么抱歉。我有很多需要学习的东西。
所以,我的尝试是基于如何用Java处理字符串,即它们是不可变的。您创建的任何String都会进入“常量字符串池”。当您对池中已存在的String进行新引用时,JVM会使该引用指示池中已存在的String对象。所以我认为很明显,2个相同的String引用指向完全相同的String对象,即使它们是单独创建的。基于此,如果引用相等,我的方法返回0,否则返回其他内容。请原谅最后的回报,我知道它很难看,程序将无法编译。我也知道(希望)它无法到达。这是函数(6行):
public int compare(String s1, String s2) {
if (s1 == s2) return 0;
else {
for (int i = 0; i < Math.min(s1.length(), s2.length()); i++) {
if (s1.charAt(i) > s2.charAt(i)) return 1;
else return -1;
}
}
return -2;
}
答案 4 :(得分:-2)
这应该有用......(避开编译所以不是100%肯定)。我知道它不是&lt; t&lt; 5行,但它应该正常工作。之后可以尝试缩短它。
for(int i=0; i < s1.length(); i++)
{
if(s2.length()-1 < i)
return -1;
if(s1.charAt(i) > s2.charAt(i))
return -1;
if(s1.charAt(i) < s2.charAt(i))
return 1;
}
if(s2.length() > s1.length())
return 1;
return 0;