Java Scanner读取特殊格式的行

时间:2015-10-30 20:14:44

标签: java string

如何读取字符串(如下所示)并用新文本替换`%rackname`或`%sysname`

KW Actual `%rackname`    -> KW Actual THE RACK NAME
KW Difference `%rackname`-> KW Actual THE RACK NAME
KW Predicted `%rackname` -> KW Actual THE RACK NAME

Loads Capacity `%sysname`          -> Loads Capacity SYS NAME
Loads Cost Difference `%sysname`   -> Loads Cost Difference SYS NAME
Loads EEPR `%sysname`              -> Loads EEPR SYS NAME

我需要将这种格式应用于arraylist中的所有字符串,并且一些字符串将有多个要替换的变量。

为这些列表找到这些可替换字段的最佳方法是什么。

我的第一个想法是使用扫描仪使用next()扫描字符串,如果我找到一个单词以“我读到字符串的末尾”开头,并找出要替换的字段。

List<String []> vars = new ArrayList<String[]>() {};
    int numfans, numsg, numcomp, numsys;
    String [] newString;
    String temp;
    Scanner scan;
    for(int i = 0; i < numRacks; i++){
        // do all racks

        for(String s: rackStr){
            newString = new String[1];                
            scan = new Scanner(s);
            while(scan.hasNext()){
                temp = scan.next();
                if(temp.startsWith("`") && temp.endsWith("`")){
                    System.out.println("Temp: " + temp);
                    System.out.println("Success");                        
                    newString[0] += findVar(temp);
                }else {
                    newString[0] += temp;
                }
            }
            vars.add(newString);
        }

我认为如果我必须为我将拥有的多个arraylists中的每个字符串创建一个新的扫描程序,这可能很糟糕。

编辑 - 好吧str.replaceAll();是一个更容易的解决方案/ facepalm

1 个答案:

答案 0 :(得分:1)

使用String.replaceAll替换字符串中的模式,例如:

str = str.replaceAll("`%rackname`", "THE RACK NAME");
str = str.replaceAll("`%sysname`", "SYS NAME");