華為筆試題如下:
Linux shell腳本中${xxx}
代表變量xxx
的值,給定一個字符串中存在一個或多個${xxx}
,需要將字符串中所有的${xxx}
替換成實際值.
示例:
輸入:
4
xxx=lyf/${ttt}/test
ttt=www
yyy=seeyou
aa=/aaa/${xxx}/bbb/${yyy}/ccc
說明:第一行4為輸入總行數(shù),其余為輸入字符串入挣,
輸出:
/aaa/lyf/www/test/bbb/seeyou/ccc
說明:將最后一行等號右邊的實際值輸出
題目記錄不是很詳細亿乳,大致是這個意思,有遇到這個題的径筏,可以直接拷貝我下邊的java代碼葛假,親測已通過。
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
/**
* 4
* xxx=lyf/${ttt}/test
* ttt=www
* yyy=seeyou
* aa=/aaa/${xxx}/bbb/${yyy}/ccc
*
* @param args
*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//用來記錄輸入變量分割后的數(shù)值
Map<String, String> map = new HashMap<String, String>();
String val = "";
while (in.hasNextLine()) {
String s = in.nextLine();
if(s.isEmpty()){
break;
}
int lineNum = Integer.parseInt(s);
String temp = "";
for (int i = 0; i < lineNum; i++) {
String str = in.next();
String[] split = str.split("=");
map.put(split[0], split[1]);
if (i + 1 == lineNum) {
temp = str;
}
}
String[] lastLineArr = temp.split("=");
String[] strings = lastLineArr[1].split("/");
//替換成實際值后的字符串
val = getString(map, strings, val);
//循環(huán)處理字符串滋恬,直到所有變量被替換成實際值為止
while (val.contains("$")) {
String[] strs = val.split("/");
val = "";
val = getString(map, strs, val);
}
}
System.out.println(val);
}
private static String getString(Map<String, String> map, String[] strings, String val) {
for (int i = 0; i < strings.length; i++) {
if (strings[i].contains("$")) {
String key = strings[i].substring(2, strings[i].length() - 1);
String value = map.get(key);
if (i == 0) {
val = value;
} else {
val = val + "/" + value;
}
} else {
if (i == 0) {
val = strings[i];
} else {
val = val + "/" + strings[i];
}
}
}
return val;
}
}