Java 实现我自己的字符串比较
有人给了我一个字符串比较的问题。我必须编写一个方法来比较两个字符串,而不使用java内置的字符串比较方法。另外,它假设大约有3-5行代码长。该方法应返回0表示相等,1表示字符串“a”大于字符串“b”,1表示字符串“a”小于字符串“b” 现在,我知道Java会根据每个字符的Java 实现我自己的字符串比较,java,string,comparison,Java,String,Comparison,有人给了我一个字符串比较的问题。我必须编写一个方法来比较两个字符串,而不使用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 co
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
public int比较(字符串s1、字符串s2){
int结果=0;
int count=0;//第一个字符串整数值总和的计数器
int count2=0;//第二个字符串整数值总和的计数器
对于(int c=0;c这应该可以工作…(还没有编译,所以不是100%确定)。我知道它不是<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;
for(int i=0;is2.字符(i))
返回-1;
if(s1.字符(i)s1.length())
返回1;
返回0;
这应该可以工作…(还没有编译,所以不是100%确定)。我知道它不是<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;
for(int i=0;is2.字符(i))
返回-1;
if(s1.字符(i)s1.length())
返回1;
返回0;
这应该可以工作…(还没有编译,所以不是100%确定)。我知道它不是<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;
for(int i=0;is2.字符(i))
返回-1;
if(s1.字符(i)s1.length())
返回1;
返回0;
这应该可以工作…(还没有编译,所以不是100%确定)。我知道它不是<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;
for(int i=0;is2.字符(i))
返回-1;
if(s1.字符(i)s1.length())
返回1;
返回0;
考虑到2字符串
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;
int comp=0;
对于(int i=0;i
它计算相同位置的每个char
到较小String
长度的差值,如果它们都0
则返回较小的String
编辑:我不知道向下投票的原因可能是什么,但无论如何,在快速测试中,它可以按预期工作(有5行长)。考虑到2个字符串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;
int comp=0;
对于(int i=0;i
它计算相同位置的每个char
到较小String
长度的差值,如果它们都0
则返回较小的String
编辑:我不知道向下投票的原因可能是什么,但无论如何,在快速测试中,它可以按预期工作(有5行长)。考虑到2个字符串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;
int comp=0;
对于(int i=0;i
它计算相同位置的每个char
到较小String
长度的差值,如果它们都0
则返回较小的String
编辑:我不知道向下投票的原因可能是什么,但无论如何,在快速测试中,它可以按预期工作(有5行长)。考虑到2个字符串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;
int comp=0;
对于(int i=0;i
它计算相同位置的每个char
到较小String
长度的差值,如果它们都0
则返回较小的String
编辑:我不知道向下投票的原因可能是什么,但无论如何,在快速测试中,它可以按预期工作(有5行长)。我认为这种递归方法可能适合您:
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;
}
}
希望这有帮助。我认为这种递归方法可能适合您:
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;
}
}
希望这有帮助。我认为这种递归方法可能适合您:
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;
}
}
希望这有帮助。我认为这种递归方法可能适合您:
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;
}
}
希望这有帮助。您是否考虑过做一个简单的词典比较,而不是比较长度(或者无论您尝试做什么,都不太容易判断):
for(int i=0;i您是否考虑过做一个简单的词典比较,而不是比较长度(或者无论您尝试做什么,都不太容易判断):
for(int i=0;i您是否考虑过做一个简单的词典比较,而不是比较长度(或者无论您尝试做什么,都不太容易判断):
for(inti=0;iH