我无法使用comparisonTo方法正确排序拆分的字符串。我该怎么做才能纠正它?

时间:2015-07-30 14:58:16

标签: java string

这是我的代码,但我知道这不对。我为这么简单的任务写了很多代码。

示例输入是:

  

欢迎

示例输出为:

  

COM
   ELC
   LCO
   青梅
   WEL

应该打印:

  

你的第一个字符串是' com'
  和
  你的最后一个字符串是' wel'

代码:

import java.io.*;
import java.util.*;

public class Solution {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        int k = sc.nextInt();
        int k1 = k;

        int j = 0;
        int t = str.length();
        String [] s = new String [1000];
        for (int i = t, a = 0; i >= k; i--, a++) {
            s[a] = str.substring(j, k1);
            j++;
            k1++;     
        }

        String[] s1 = new String[j];
        for (int i = 0 ; i < j; i++) {
            s1[i] = s[i];
        }

        for (int y = 0; y < j; y++) {
            for (int z = y + 1; z < j; z++) {
                if(s1[z].compareTo(s1[y]) < 0) {
                    String temp = s1[z];
                    s1[z] = s1[y];
                    s1[y] = temp;
                } 
            }
        }
        System.out.println(s1[0]);
        System.out.println(s1[1]);
     }
}

注意:我分裂了我的字符串,但是我无法按字母顺序排列字符串,并且觉得我使用了很多数组。有更好的方法吗?

4 个答案:

答案 0 :(得分:0)

只需使用

即可轻松对String []数组进行排序
 Arrays.sort(s);

这将按默认顺序对字符串进行排序。如果您需要任何其他类型的订单,您可以将比较器作为第二个参数传递。

你可以通过获得s [0]和s [s.length-1]

获得第一个和最后一个

答案 1 :(得分:0)

我快速实施了您的要求。它可能不是你正在寻找的,但它应该让你开始。 :)

因此,我使用ArrayList来获取子字符串,并使用Collections库为我进行排序。这只是解决问题的众多方法之一,顺便说一下。输入字的大小可能不同,所以我觉得列表适合这种情况。

        String s = "welcome";
        List<String> words = new ArrayList<String>();
        for (int i = 0; i < s.length() - 2; i++) {
            String chunk = s.charAt(i) + "" + s.charAt(i + 1) + ""
                    + s.charAt(i + 2);
            words.add(chunk);
            System.out.println(chunk);
        }
        Collections.sort(words);
        System.out.println(words.toString());

如果您有任何问题或我在代码中犯了错误,请随时告诉我。

祝你好运!

答案 2 :(得分:0)

您的代码的实际问题是分裂。排序将有效。如果j1k13,那么wel子字符串即将到来。下一个循环,(jk1增加1j2k14然后elc子字符串即将到来,等等。

所以,而不是

    String [] s = new String [1000];
    for (int i = t, a = 0; i >= k; i--, a++) {
        s[a] = str.substring(j, k1);
        j++;
        k1++;     
    }

使用

    int k = sc.nextInt(); 
    String [] s = new String [(str.length()/3)+1] ; 
    for ( int i = 0,a = 0; i<(str.length()-k); i+=k,a++) 
    { 
    s[a] = str.substring(i,(i+k));
    System.out.println(s[a]);
    }
    s[s.length-1]=str.substring((str.length()-k),str.length());//to add remaining values

    Arrays.sort(s);//sorting alphabatically

    for(int i = 0; i < s.length; i++)
        System.out.println(s[i]);
    }

i值将增加3。在for循环中(i+=k) k=3

<强>输出:

amp
com
e s
ple
wel

答案 3 :(得分:0)

你可以

  • 减少变量数量,
  • 使用集合(在本例中为list)而不是Arrays来避免必须设置大小(1000)
  • 使用框架排序

    Scanner sc = new Scanner(System.in);
    String str = sc.nextLine();
    int k = sc.nextInt();
    
    List<String> cutStrings = new ArrayList<String>();
    for (int i = 0; i < str.length() - k; i++) {
        cutStrings.add(str.substring(i, i + k));
    }
    
    Collections.sort(cutStrings);
    System.out.println(cutStrings.get(0));
    System.out.println(cutStrings.get(cutStrings.size()-1));
    

    }