华为笔试题:Linux shell脚本中${xxx}代表变量xx

2020-02-05  本文已影响0人  小民自愚

华为笔试题如下:
Linux shell脚本中${xxx}代表变量xxx的值,给定一个字符串中存在一个或多个${xxx},需要将字符串中所有的${xxx}替换成实际值.
示例:
输入:
4
xxx=lyf/${ttt}/test
ttt=www
yyy=seeyou
aa=/aaa/${xxx}/bbb/${yyy}/ccc
说明:第一行4为输入总行数,其余为输入字符串,
输出:
/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);
                //用来记录输入变量分割后的数值
        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);
                      //循环处理字符串,直到所有变量被替换成实际值为止
            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;
    }
}
企业微信截图_15809565231324.png
上一篇 下一篇

猜你喜欢

热点阅读