package huawei;
import java.util.LinkedHashSet;
import java.util.Scanner;
import java.util.Set;
/**
*
问题描述:
在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格、问号、数字等等;
另外单个字母不算单词);找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),
然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次;如果整个输入的字符串中没有找到单词,请输出空串。
输出的单词之间使用一个“空格”隔开,最后一个单词后不加空格。
要求实现函数:
void my_word(char input[], char output[])
【输入】 char input[], 输入的字符串
【输出】 char output[],输出的字符串
【返回】 无
示例
输入:char input[]="some local buses, some1234123drivers" ,
输出:char output[]="drivers local buses some"
输入:char input[]="%A^123 t 3453i*()" ,
输出:char output[]=""
* @author USER
*
*/
public class FindWord {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String string = in.nextLine();
my_word(string);
}
private static void my_word(String input) {
// TODO Auto-generated method stub
String output = "";
Set<String> set = new LinkedHashSet<String>();//要保证:如果长度相同,则按出现的顺序进行排列
String[] str = input.split("[^a-zA-Z]+");//正则表达式:以不是字母的字符分割
for (int i = 0; i < str.length; i++) {
if (str[i].length() != 1) {
set.add(str[i]);
}
}
Object[] strArray = set.toArray();//set集合数据转为数组中,注意返回值是Object[],不是String[],否则编译出错
//利用插入排序来输出长度从大到小的单词,插入排序具有稳定性,若出现相同字符串时,不改变它的具体位置
for (int i = 1; i < strArray.length; i++) {
for (int j = i; (j > 0) && (((String) strArray[j]).length() > ((String) strArray[j-1]).length()) ; j--) {
String temp = (String) strArray[j];
strArray[j] = strArray[j-1];
strArray[j-1] = temp;
}
}
for (int i = 0; i < strArray.length; i++) {
if (i != strArray.length-1) {
System.out.print(strArray[i]+" ");
}else {
System.out.print(strArray[i]);//保证最后一个单词不加空格
}
}
}
}
//测试结果:
//输入:some local buses, some1234123drivers,4314people welcome&*%$to()some!@#local89076host
//输出:drivers welcome people local buses some host to
//显示符合要求,正确!
华为机试---筛选出字符串中的单词
最新推荐文章于 2022-08-18 19:59:15 发布