Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 替换“<&引用;及&燃气轮机&引用;加上&;lt&引用;及&;燃气轮机&引用;_Java_Android - Fatal编程技术网

Java 替换“<&引用;及&燃气轮机&引用;加上&;lt&引用;及&;燃气轮机&引用;

Java 替换“<&引用;及&燃气轮机&引用;加上&;lt&引用;及&;燃气轮机&引用;,java,android,Java,Android,如果它不是html标记的一部分,我想用和替换。 输入将是一个可能包含某些html标记的字符串。它还可以包含小于号和大于号(“>”粗体) 字符串示例3=“foo>>” 作为我想要得到的输出: String output1 = "-&gt; <b> Bold </b> &lt;-"; String output2 = "&lt; <i> Italic </i> &gt;"; String output3 = "<

如果它不是html标记的一部分,我想用
替换
。 输入将是一个可能包含某些html标记的字符串。它还可以包含小于号和大于号(“>”粗体) 字符串示例3=“foo>>” 作为我想要得到的输出:

String output1 = "-&gt; <b> Bold </b> &lt;-";
String output2 = "&lt; <i> Italic </i> &gt;";
String output3 = "<i>foo &gt;&gt; </i>";
String output1=“-Bold-”;
字符串output2=“斜体”;
字符串output3=“foo”;
所以,
replaceAll
不起作用,我想我必须使用正则表达式匹配。有什么想法吗?其他方法

注1:由于某些项目要求,第三方库不是一个选项。

注2:我们只支持HTML标记的子集(文本样式标记:斜体、下划线、粗体等)

如果您不想麻烦使用外部库,则需要使用所有HTML标记创建一个数组,并针对字符串运行它


我并不推荐它,因为有这样的库…

如果您不想麻烦使用外部库,那么您需要创建一个包含所有html标记的数组,并针对字符串运行它


我真的不推荐它,因为有用于该功能的库…

假设有任意HTML文件,您必须隔离文本节点并在这些节点上运行
replace

如果你不能使用现有的库,我会自己写


(JSoup可以做到这一点,但它是一个“外部库”——也就是说,不包括在Java SE标准中,但只是重新实现它是一个选项。)

假设有任意HTML文件,您必须隔离文本节点并在这些节点上运行
replace

如果你不能使用现有的库,我会自己写


(JSoup可以做到这一点,但它是一个“外部库”——也就是说,不包括在Java SE标准中,但只是重新实现它是一个选项。)

这是一项非繁琐的任务。HTML不是一种常规语言(可能是不规则的?),因此不能使用正则表达式对其进行解析。我建议如下:

选择1 如果不需要保留空白,请使用此选项

  • 删除输入中的所有空白
  • 使用“”作为分隔符将输入拆分为令牌;保留分隔符
  • 过程如下:
  • 如果令牌不是受支持的HTML标记并且包含“”,请根据需要转换“>”
  • 传递HTML标记不变
  • 选择2 使用多字符前瞻处理每个输入行


    对于输入中的每个字符。转换字符为{“>”,“这是一项非繁琐的任务。HTML不是常规语言(可能是不规则的?),因此您无法使用正则表达式对其进行解析。我建议如下:

    选择1 如果不需要保留空白,请使用此选项

  • 删除输入中的所有空白
  • 使用“”作为分隔符将输入拆分为令牌;保留分隔符
  • 过程如下:
  • 如果令牌不是受支持的HTML标记并且包含“”,请根据需要转换“>”
  • 传递HTML标记不变
  • 选择2 使用多字符前瞻处理每个输入行


    对于输入中的每个字符。转换字符为{“>”,“,假设字符串包含有效的
    HTML标记
    。可以应用以下方法来解析字符串,以获得您要查找的结果:

    private static String parse(String str)
    {
        StringBuilder sBuilder = new StringBuilder();
        for (int i = 0 ; i < str.length() ; i++)
        {
            char ch = str.charAt(i);
            if (ch == '>' && i != 0)
            {
                char c = str.charAt( i - 1);
                if (Character.isWhitespace(c) || !Character.isLetter(c))
                {
                    sBuilder.append("&gt;");
                }
                else
                    sBuilder.append(ch);
            }
            else if (ch == '>' && i==0)
            {
                sBuilder.append("&gt;");
            }
            else if (ch == '<' && i < str.length() - 1)
            {
                char c = str.charAt( i + 1);
                if (!(c=='/' || Character.isLetter(c)))
                {
                    sBuilder.append("&lt;");
                }
                else
                    sBuilder.append(ch);
            }
            else if (ch == '<' && i == str.length() - 1)
            {
                sBuilder.append("&lt;");
            }
            else
            {
                sBuilder.append(ch);
            }
        }
        return sBuilder.toString();
    }
    
    私有静态字符串解析(字符串str)
    {
    StringBuilder sBuilder=新StringBuilder();
    对于(int i=0;i”&&i==0)
    {
    sBuilder.append(“”);
    }
    
    else if(ch=='假设字符串包含有效的
    HTML标记
    。可以应用以下方法来解析字符串,以获得所需的结果:

    private static String parse(String str)
    {
        StringBuilder sBuilder = new StringBuilder();
        for (int i = 0 ; i < str.length() ; i++)
        {
            char ch = str.charAt(i);
            if (ch == '>' && i != 0)
            {
                char c = str.charAt( i - 1);
                if (Character.isWhitespace(c) || !Character.isLetter(c))
                {
                    sBuilder.append("&gt;");
                }
                else
                    sBuilder.append(ch);
            }
            else if (ch == '>' && i==0)
            {
                sBuilder.append("&gt;");
            }
            else if (ch == '<' && i < str.length() - 1)
            {
                char c = str.charAt( i + 1);
                if (!(c=='/' || Character.isLetter(c)))
                {
                    sBuilder.append("&lt;");
                }
                else
                    sBuilder.append(ch);
            }
            else if (ch == '<' && i == str.length() - 1)
            {
                sBuilder.append("&lt;");
            }
            else
            {
                sBuilder.append(ch);
            }
        }
        return sBuilder.toString();
    }
    
    私有静态字符串解析(字符串str)
    {
    StringBuilder sBuilder=新StringBuilder();
    对于(int i=0;ielse if(ch==”如果只支持五个html标记,则可以首先从文本中删除这些标记。
    
    将<和>替换为<和>,然后再次添加html标记。您可以将
    从文本中删除,方法是将其替换为例如[b]。对其他标记执行相同操作。

    如果您只支持五个html标记,则可以先从文本中删除这些标记。
    将<和>替换为<和>,然后再次添加html标记。您可以将
    从文本中删除
    ,方法是将其替换为例如[b]。对其他标记执行相同操作。

    为了完整起见,“foo>>怎么样?仅仅是你想留下的标签还是它们的内容?@scorpiodawg我更新了这个问题,检查itOh和另一个问题:你想留下特定的HTML标签,还是任何看起来像标签的东西?字符串“”的输出应该是什么?我们支持HTML标签的子集(大约5个),它们应该完好无损。因此输入输出应该是:“qxg/qxq”只是为了完整,那么“foo>>”呢?它只是你想留下的标记还是它们的内容?@scorpiodawg我更新了这个问题,检查itOh和另一个问题:你想要特别的HTML标记吗