问题不在我说的那里 应该出在MyString的compare和equals方法上

解决方案 »

  1.   

    我想楼主的compare方法写错了public int compareTo(MyString o) {
            if(this.subLength>o.subLength)
                return -1;
            else if(this.subLength>o.subLength)  // 这里跟上个if条件一样
                return 1;
            else
                return 0;
        }
    应该改为public int compareTo(MyString o) {
            if(this.subLength>o.subLength)
                return -1;
            else if(this.subLength<o.subLength)
                return 1;
            else
                return 0;
        }
    试试
      

  2.   

    package com.xyj.test;import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.LinkedList;
    import java.util.List;public class Test6 {
    private static List<String> list = new LinkedList<String>();

    public static void main(String[] args) {
    BufferedReader reader = null;
    try {
    reader = new BufferedReader(new InputStreamReader(System.in));
    String str = reader.readLine();

    List<String> list = getWordList(str);

    List<String> reList = sortWordByLength(list);
    for(Iterator<String> iter=reList.iterator(); iter.hasNext();) {
    System.out.println(iter.next());
    }

    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    if(reader != null) {
    try {
    reader.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    }

    public static List<String> getWordList(String str) {
    StringBuilder sb = new StringBuilder();
    for(int i=0; i<str.length(); i++) {
    char c = str.charAt(i);
    if(c<='z'&&c>='a' || c<='Z'&&c>='A') {
    sb.append(c);
    } else {
    if(sb.length()!=0 && !"".equals(sb.toString().trim())) {
    list.add(sb.toString());
    }

    sb = new StringBuilder();
    }

    if(i == str.length()-1) {
    if(sb.capacity() != 0) {
    list.add(sb.toString());
    }
    }
    }

    return list;
    }

    public static List<String> sortWordByLength(List<String> list) {
    List<String> reList = new ArrayList<String>(); 

    int size = list.size();
    int totalSize = size;

    while(reList.size() < totalSize) {
    int maxLength = 0;
    int maxIndex = 0;
    for(int i=0; i<size; i++) {
    int len = list.get(i).length();
    if(len > maxLength) {
    maxLength = len;
    maxIndex = i;
    }
    }

    reList.add(list.get(maxIndex));
    list.remove(maxIndex);
    size--;
    }

    return reList;
    }
    }
      

  3.   

    面试可以用库函数不?
    字符串用正则表达式匹配下,得到的串分别塞到自写类MyString里面,MyString实现个Comparable接口覆盖equals全部塞到TreeSet里面打印下,这种允许么?
      

  4.   


    package huawei.exam;import java.util.ArrayList;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class StringSort {
    private List<String> words = new ArrayList<String>(); public void getWords(String test_str) {
    Pattern p = Pattern.compile("[a-zA-Z]{2,}+");
    Matcher m = p.matcher(test_str);
    while (m.find()) {
    String tmp_str = m.group();
    if (check(tmp_str))
    words.add(getindex(tmp_str),tmp_str);
    }
    } private boolean check(String tmp_str) {
    if (words.contains(tmp_str)) {
    return false;
    } else {
    return true;
    }
    } private int getindex(String tmp_str){
    int tmp_length = tmp_str.length();
    int words_length = words.size();
    if(words_length==0){
    return 0;
    }
    else{
    for(int i =0;i<words_length;i++){
    if(tmp_length >= words.get(i).length()){
    continue;
    }else{
    return i;
    }

    }
    return words_length;
    }
    }

    private String newString() {
    String newString = "";

    for(int i =0;i<words.size();i++){
    if(i!= words.size()-1)
    newString += words.get(i)+" ";
    else
    newString += words.get(i);
    }

    return newString;
    } public static void main(String[] args) {
    StringSort ss = new StringSort();
    ss.getWords("hello12dd21 we / ;dw");
    System.out.println(ss.newString());
    }
    }
      

  5.   

    static class MyString implements Comparable<MyString>{
    String str;
    public MyString(String str){
    this.str = str;
    }

    @Override
    public int compareTo(MyString obj) {
    if(equals(obj)){
    return 0;
    }
    if(str.length() > obj.str.length()){
    return -1;
    }
    else{
    return 1;
    }
    } @Override
    public boolean equals(Object obj) {
    if(!(obj instanceof MyString)){
    return false;
    }
    MyString temp = (MyString)obj;
    if(!str.equals(temp.str)){
    return false;
    }
    return true;
    }


    }