Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现我自己的字符串比较_Java_String_Comparison - Fatal编程技术网

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

有人给了我一个字符串比较的问题。我必须编写一个方法来比较两个字符串,而不使用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
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