我有以下方法可以标准化给定的 XML 标记名称:
public static String normaliseTagName(String tagName) {
// Return a given empty tag name.
if (tagName.length() == 0) {
return tagName;
}
// Replace invalid start.
if (isInvalidXMLStart(tagName.charAt(0))) {
tagName = XML_REPLACEMENT + tagName;
}
// Replace invalid characters.
StringBuilder normalised;
boolean invalidFound = false;
for (int i = 0; i < tagName.length(); i++) {
if (isInvalidXMLChar(tagName.charAt(i))) {
if (!invalidFound) {
normalised = new StringBuilder(tagName.substring(0, i));
invalidFound = true;
}
normalised.append(XML_REPLACEMENT); // COMPILER ERROR
} else if (invalidFound) {
normalised.append(tagName.charAt(i)); // COMPILER ERROR
}
}
return invalidFound ? normalised.toString() : tagName; // COMPILER ERROR
}
在确定使用StringBuilder标准化
之前,我不想初始化它。换句话说,我只想在发现无效的 XML 字符时初始化它。
我得到了 The local variable normalized may not have beeninitialized
错误,并且我很困惑为什么编译器告诉我,当 normalized
显然是从未在未初始化的情况下使用。
- 在这种情况下,我是否遗漏了某些内容,或者编译器无法确定
StringBuilder 规范化
的初始化路径? - 如果无法避免此编译错误,我该如何修改此代码,以便仅在需要时才初始化
StringBuilder
?
谢谢!
最佳答案
您需要显式初始化局部变量:
StringBuilder normalised = null;
...或...
StringBuilder normalised = new StringBuilder();
...在引用它之前。
代码中的一些路径在初始化之前引用规范化
:
normalised.append(...
局部变量不会像实例字段那样自动初始化。
关于java - StringBuilder循环: Local variable may not have been initialized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22816829/