package com.abuge;
import java.util.Comparator;
import java.util.TreeSet;
import org.junit.Test;
/**
* 2 字符串处理转换
问题描述:
在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格、问号、数字等等;
另外单个字母不算单词);找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),
然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次;如果整个输入的字符串中没有找到单词,请输出空串。
输出的单词之间使用一个“空格”隔开,最后一个单词后不加空格。
要求实现函数:
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[]=""
*
*/
class strLenComparator implements Comparator<String>
{
@Override
public int compare(String s1, String s2)
{
if(s1.length() < s2.length())
{
return 1;
}
if(s1.length() > s2.length())
return -1;
if(s1.equals(s2))
return 0;
return 1;
}
}
public class InterviewDemo2
{
public void m_wrd(char[] input, char[] output)
{
String strInput = new String(input);
String strOutput = new String(output);
StringBuilder sb = new StringBuilder();
//构建一个TreeSet按自定义比较格式的字符串,并且可以去重
TreeSet<String> ts = new TreeSet<String>(new strLenComparator());
//使用正则表达式
String[] strArray = strInput.split("[^a-zA-Z]+");
for(int i = 0; i < strArray.length; i++)
{
if(strArray[i].length() != 1)
{
ts.add(strArray[i]);
}
}
while(ts.size() != 0)
{
String str = (String) ts.pollFirst();
sb.append(str);
sb.append(' ');
}
int len = sb.length();
if(len != 0)
{
sb.deleteCharAt(len - 1);
}
strOutput = sb.toString();
output = strOutput.toCharArray();
}
@Test
public void test()
{
String strInput = "some local buses, some1234123drivers";
char[] strOutput = {};
m_wrd(strInput.toCharArray(), strOutput);
}
}
华为机试题——字符串处理
最新推荐文章于 2022-05-18 08:42:10 发布