Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.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_Arrays_Sorting - Fatal编程技术网

如何在Java中比较字符串

如何在Java中比较字符串,java,arrays,sorting,Java,Arrays,Sorting,在采访中,我遇到了这样一个问题:首先在LNAME中排序数组,然后在FNAME中排序,而不使用任何内置函数,比如(compare,compareTo,Collections.sort) 不幸的是,我对字符串进行了如下比较 String fname; String lname; for (int i = 0; i < NAMES.length; i++) { lname = NAMES[i][0]; for (int j = i + 1;

在采访中,我遇到了这样一个问题:首先在LNAME中排序数组,然后在FNAME中排序,而不使用任何内置函数,比如(
compare
compareTo
Collections.sort

不幸的是,我对字符串进行了如下比较

    String fname;
    String lname;
    for (int i = 0; i < NAMES.length; i++) {
        lname = NAMES[i][0];
        for (int j = i + 1; j < NAMES.length; j++) {
            if (NAMES[j][1] < lname) {  // showing compilation error :(

            }
        }
    }
字符串fname;
字符串名称;
for(int i=0;i
我知道这是错误的。那么,如果不使用任何内置函数,我如何比较它们呢


注意:我还没有添加完整的代码段。只是想知道,我们如何比较字符串。

根据String.class compareTo(字符串s)方法说明如下。你可能可以参考下面的片段,但它同样不能满足你的要求,因为compareTo方法使用数学函数。但我相信这就是面试官想要的

  public int compareTo(String s)
{
    int i = value.length;
    int j = s.value.length;
    int k = Math.min(i, j);
    char ac[] = value;
    char ac1[] = s.value;
    for(int l = 0; l < k; l++)
    {
        char c = ac[l];
        char c1 = ac1[l];
        if(c != c1)
            return c - c1;
    }

    return i - j;
}
public int compareTo(字符串s)
{
int i=value.length;
int j=s.value.length;
int k=数学最小值(i,j);
字符ac[]=值;
char ac1[]=s.值;
对于(int l=0;l
这是一个很难回答的问题。它更像是一个学校作业;)

public void sort(){
字符串名[][]={{“Abse”,“Blase”},{“Gua”,“Blase”},{“Gua”,“Tysg”},{“Hysdt”,“Tyser”};
列表结果=新的ArrayList(3);
for(字符串[]名称:名称){
if(result.isEmpty()){
结果。添加(名称);
持续
}
int addAt=0;
对于(字符串[]sortedName:result){
if(isBefore(名称、分类名称)){
打破
}
addAt++;
}
结果。添加(地址、名称);
}
}
私有布尔值isBefore(字符串[]名称,字符串[]名称2){
//姓
int位置=0;
char[]lastName1=name[1].toLowerCase().toCharArray();
char[]lastName2=name2[1]。toLowerCase().toCharray();
while(lastName1.length>position&&lastName2.length>position){
if(lastName1[职位]lastName2[position]){
返回false;
}
位置++;
}
位置=0;
char[]firstName1=name[0]。toLowerCase().toCharArray();
char[]firstName2=name2[0]。toLowerCase().toCharray();
while(firstName1.length>position&&firstName2.length>position){
if(firstName1[职位]firstName2[position]){
返回false;
}
位置++;
}
//平等,所以不管怎样
返回false;
}
我有一种感觉,你可以用lambdas做这件事容易得多,但我真的不知道

运算符无法比较
字符串,因此我们可以使用它来比较字符

也许可以实现您自己的字符串比较方法。它逐字符检查并返回具有最大值的字符串

public String compare(String s1, String s2)
{
   for(int i = 0; i < Math.min(s1.length(), s2.length()); i++)
   {
        if(s1.charAt(i) > s2.charAt(i))
          return s1;
   }
     return s2;
}
公共字符串比较(字符串s1、字符串s2)
{
对于(int i=0;is2.字符(i))
返回s1;
}
返回s2;
}
来完成你问题的答案

    public class GreatString {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String NAMES[][] = { { "Abse", "Blase" }, { "Gua", "Tysg" },
                { "Hysdt", "Tyser" } };
        int n = NAMES.length;
        for (int i = 0; i < n; i++) {
            for (int j = i; j < n; j++) {
                if (NAMES[i][0].equals(NAMES[j][0])) {
                    if (compare(NAMES[i][1], NAMES[j][1])) {
                        String[] temp = NAMES[i];
                        NAMES[i] = NAMES[j];
                        NAMES[j] = temp;
                    } else {
                        if (compare(NAMES[i][0], NAMES[j][0])) {
                            String[] temp = NAMES[i];
                            NAMES[i] = NAMES[j];
                            NAMES[j] = temp;
                        }
                    }
                }
            }
        }

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < NAMES[i].length; j++) {
        System.out.println(NAMES[i][j]);}}
    }

    private static boolean compare(String str1, String str2) {
        // TODO Auto-generated method stub
        int len = str1.length() < str2.length() ? str1.length() : str2.length();
        for (int i = 0; i < len; i++) {
            if (str1.charAt(i) > str2.charAt(i))
                return true;
        }
        return false;
    }
}
公共类GreatString{
/**
*@param args
*/
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
字符串名[][]={{“Abse”,“Blase”},{“Gua”,“Tysg”},
{“Hysdt”,“Tyser”};
int n=name.length;
对于(int i=0;istr2.字符(i))
返回true;
}
返回false;
}
}

您所说的“不使用任何内置功能”是什么意思?没有方法调用?我认为没有任何方法可以不使用方法访问字符串中的字符。您正在寻找
String.compareTo()
@a_horse_,with_no_name不,他们提到不应该使用它,而不使用任何内置函数。您是指只使用直接比较字符串的函数,而不是像lowercase()、length()这样的函数吗,charAt()?
public String compare(String s1, String s2)
{
   for(int i = 0; i < Math.min(s1.length(), s2.length()); i++)
   {
        if(s1.charAt(i) > s2.charAt(i))
          return s1;
   }
     return s2;
}
    public class GreatString {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String NAMES[][] = { { "Abse", "Blase" }, { "Gua", "Tysg" },
                { "Hysdt", "Tyser" } };
        int n = NAMES.length;
        for (int i = 0; i < n; i++) {
            for (int j = i; j < n; j++) {
                if (NAMES[i][0].equals(NAMES[j][0])) {
                    if (compare(NAMES[i][1], NAMES[j][1])) {
                        String[] temp = NAMES[i];
                        NAMES[i] = NAMES[j];
                        NAMES[j] = temp;
                    } else {
                        if (compare(NAMES[i][0], NAMES[j][0])) {
                            String[] temp = NAMES[i];
                            NAMES[i] = NAMES[j];
                            NAMES[j] = temp;
                        }
                    }
                }
            }
        }

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < NAMES[i].length; j++) {
        System.out.println(NAMES[i][j]);}}
    }

    private static boolean compare(String str1, String str2) {
        // TODO Auto-generated method stub
        int len = str1.length() < str2.length() ? str1.length() : str2.length();
        for (int i = 0; i < len; i++) {
            if (str1.charAt(i) > str2.charAt(i))
                return true;
        }
        return false;
    }
}