华为的一道上机题,我用java写怎么老是莫名其妙的异常呢?
问题描述:
在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格、问号、数字等等;另外单个字母不算单词);找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次;如果整个输入的字符串中没有找到单词,请输出空串。输出的单词之间使用一个“空格”隔开,最后一个单词后不加空格。
要求实现函数:
import java.util.Scanner;import java.util.Set;import java.util.TreeSet;public class StringSort { public static void main(String[] args) { Scanner in = new Scanner(System.in); String s = in.next(); int subLength = 0; StringBuilder sb = new StringBuilder(); Set<MyString> strs = new TreeSet<MyString>(); for(int i=0;i<s.length();i++){ char c = s.charAt(i); if((c<='z'&&c>='a')||(c<='Z'&&c>='A')){ subLength++; sb.append(c); } else { if(subLength!=0){ System.out.println(sb.toString()+" "+subLength); strs.add(new MyString(sb.toString(), subLength)); sb.delete(0,sb.capacity()); subLength = 0; } } } if(subLength!=0){ System.out.println(sb.toString()+" "+subLength); strs.add(new MyString(sb.toString(), subLength)); } java.util.Iterator<MyString> it = strs.iterator(); while(it.hasNext()){ MyString myString = it.next(); System.out.println(myString.subStr); } }}class MyString implements Comparable<MyString>{ String subStr; int subLength; public MyString(String subStr, int subLength) { this.subStr = subStr; this.subLength = subLength; } @Override public int compareTo(MyString o) { if(this.subLength>o.subLength) return -1; else if(this.subLength>o.subLength) return 1; else return 0; } @Override public boolean equals(Object obj) { return this.subStr.equals(((MyString)obj).subStr); } }
}
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;
}
}
[解决办法]
面试可以用库函数不?
字符串用正则表达式匹配下,得到的串分别塞到自写类MyString里面,MyString实现个Comparable接口覆盖equals全部塞到TreeSet里面打印下,这种允许么?
[解决办法]
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()); }}
[解决办法]
楼主哪个地区的,华为这么早就面试了啊