java - StringBuilder循环: Local variable may not have been initialized

标签 java compiler-errors initialization stringbuilder

我有以下方法可以标准化给定的 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 显然是从未在未初始化的情况下使用。

  1. 在这种情况下,我是否遗漏了某些内容,或者编译器无法确定 StringBuilder 规范化 的初始化路径?
  2. 如果无法避免此编译错误,我该如何修改此代码,以便仅在需要时才初始化 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/

相关文章:

c# - 我可以缓存的最大值是多少?

java - 如何使用 Java 在任何操作系统中创建隐藏文件

java - 我如何在 Retrofit2 中使用 jsonapi?

java - IntelliJ IDEA - 错误 : A JNI error has occurred, 请检查您的安装并重试

excel - 循环执行错误

json - 如何动态添加结构属性以避免冗余代码?

java - 具有相同 url 映射的多个过滤器

ruby - 无法在 Ruby : uninitialized constant (NameError) 中将一个类包含到另一个类中

c - 将指定的初始值设定项与未命名的嵌套数据类型一起使用

c - C 中的 "Pointer Expected"和 "Conflicting argument type"错误