最近碰到的面试题:
java:
题目描述:
1. 给定一个字符串,将其中的每一个单词进行翻转并输出翻转后的字符串
2. 单词的定义为“连续的由字母组成的子串”,例如"abc-1de/fg"的单词有3个,为["abc", "de", "fg"]
示例:
输入:"abc-1de/fg"
输出:"cba-1ed/gf"
函数体:
public String wordReverse(String inputStr) {
}
花了一点时间写出了答案:
public static String wordReverse(String inputStr){
//先转为字符传集合
String [] inputArray = inputStr.split("");
List<String> strList = Arrays.asList(inputArray);
String strPattern = "[a-zA-Z]";
String [] resultArr = new String[inputStr.length()];
List<String> abcList = new ArrayList<>();
boolean isWhile = true;
int i = 0;
//字母与非字母分开
while (isWhile){
String word = "";
for( i = i ; i<strList.size(); i++){
String str = strList.get(i);
Pattern p = Pattern.compile(strPattern);
Matcher m = p.matcher(str);
if(m.matches()){
word +=str;
}else{
resultArr[i] = str;
i++;
break;
}
}
if(!"".equals(word)){
abcList.add(word);
}
if(i == strList.size()){
isWhile =false;
}
}
//对字母串进行反转
List<String> results = new ArrayList<>();
abcList.forEach(str->{
StringBuffer a = new StringBuffer();
String subString = "";
for(int m = str.length(); m>0; m--){
subString = str.substring(m-1, m);
a.append(subString);
}
results.add(a.toString());
});
abcList = results;
//形成反转后的字符串数组
StringBuffer sb = new StringBuffer();
for(int j = 0; j < abcList.size();j++){
sb.append(abcList.get(j));
}
String abc = sb.toString();
String [] abcArr = abc.split("");
int h = 0;
for(int z = 0; z<resultArr.length;z++){
if(resultArr[z] == null){
resultArr[z] = abcArr[h];
h++;
}
}
//字符串数组转为字符串
StringBuffer sb2 = new StringBuffer();
for(int z = 0; z<resultArr.length;z++){
sb2 .append(resultArr[z]);
}
return sb2.toString();
}
public static void main(String [] ffff){
System.out.println(wordReverse("abc-1de/fg"));
}
输出:"cba-1ed/gf"
有问题随时留言,我会及时更新