0
public static String modifyForCompliance(String header) {
    String modHeader = header;
    for (int i = 0; i < replacement.length; i++) {
        modHeader.replaceAll(Pattern.quote(replacement[i][0]), Pattern.quote(replacement[i][1]));
        System.out.println(modHeader);
    }
    return modHeader;
}

所以上面我有这个方法,它应该将下面数组中的所有 [i][0] args 更改为 [i][1] args。这应该允许将字符串放入文件名中。但是,我得到的印刷品发布在下面,您会注意到它与该方法试图做的不匹配......有没有人对如何解决这个问题有任何想法?

起始字符串:

Game <UUID: a1ddc565-8205-45e6-9c9e-4855ee271c0b>

大批:

public static final String[][] replacement = new String[][] {{" ", "_"}, {"\\", "(backslash)"}, {"/", "(forwardslash)"}, {":", "="}, {"*", "(asterisk)"}, {"?", "(q-mark)"}, {"\"", "(quotation)"}, {"<", "("}, {">", ")"}, {"|", "(bar)"}};

印刷:

2013-09-14 11:15:21 [INFO] Game <UUID: a1ddc565-8205-45e6-9c9e-4855ee271c0b>
2013-09-14 11:15:21 [INFO] Game <UUID: a1ddc565-8205-45e6-9c9e-4855ee271c0b>
2013-09-14 11:15:21 [INFO] Game <UUID: a1ddc565-8205-45e6-9c9e-4855ee271c0b>
2013-09-14 11:15:21 [INFO] Game <UUID: a1ddc565-8205-45e6-9c9e-4855ee271c0b>
2013-09-14 11:15:21 [INFO] Game <UUID: a1ddc565-8205-45e6-9c9e-4855ee271c0b>
2013-09-14 11:15:21 [INFO] Game <UUID: a1ddc565-8205-45e6-9c9e-4855ee271c0b>
2013-09-14 11:15:21 [INFO] Game <UUID: a1ddc565-8205-45e6-9c9e-4855ee271c0b>
2013-09-14 11:15:21 [INFO] Game <UUID: a1ddc565-8205-45e6-9c9e-4855ee271c0b>
2013-09-14 11:15:21 [INFO] Game <UUID: a1ddc565-8205-45e6-9c9e-4855ee271c0b>
2013-09-14 11:15:21 [INFO] Game <UUID: a1ddc565-8205-45e6-9c9e-4855ee271c0b>
4

2 回答 2

4

字符串是不可变的,因此您必须重新分配modHeader

modHeader = modHeader.replaceAll(...);

顺便说一句,您可能想replace()改用它,因为您不处理正则表达式。IE:

modHeader = modHeader.replace(replacement[i][0], replacement[i][1]);

这将摆脱烦人的Pattern.quote()电话。

于 2013-09-14T15:28:13.727 回答
0

String#replaceAll()返回String具有更新值的 ,并且不影响String您传递的 。

字符串在 Java 中是不可变的。

modHeader = modHeader.replaceAll(..);
于 2013-09-14T15:30:10.187 回答