Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 删除html标记_Java_Arrays_String - Fatal编程技术网

Java 删除html标记

Java 删除html标记,java,arrays,string,Java,Arrays,String,我有一位教授要求我们在不使用removeAll方法的情况下删除HTML标记(在)中的任何内容 我目前有: public static void main(String[] args) throws FileNotFoundException { Scanner input = new Scanner(new File("src/HTML_1.txt")); while (input.hasNext()) { String html = in

我有一位教授要求我们在不使用removeAll方法的情况下删除HTML标记(在<和>)中的任何内容

我目前有:

public static void main(String[] args)
        throws FileNotFoundException {
    Scanner input = new Scanner(new File("src/HTML_1.txt"));
    while (input.hasNext())
    {
        String html = input.next();
        System.out.println(stripHtmlTags(html));
    }

}

static String stripHtmlTags(String html)
{
    int i;
    String[] str = html.split("");
    String s = "";
    boolean tag = false;

    for (i = html.indexOf("<"); i < html.indexOf(">"); i++) 
    {
        tag = true;
    }

    if (!tag) 
    {
        for (i = 0; i < str.length; i++) 
        {
            s += str[i];
        }
    }
    return s;   
}

除非我疯了,否则你什么都不印。由于没有函数或变量接收到返回的字符串,因此将返回更改并立即销毁这些更改

改变

stripHtmlTags(html);

此外,您还将标记设置为true或false,并将其应用于整行。如果你在标签中,你需要保持跟踪,如果你在标签中,则忽略这些字符


因此,循环遍历字符串html的每个字母。如果它是一个<你知道一个标记正在开始,否则如果它是一个>一个标记正在结束,如果它不是其中任何一个(其他任何东西),那么检查你是否在一个标记(布尔标记)中,如果你没有将它添加到字符串中。

除非我疯了,否则你不会打印任何东西。由于没有函数或变量接收到返回的字符串,因此将返回更改并立即销毁这些更改

改变

stripHtmlTags(html);

此外,您还将标记设置为true或false,并将其应用于整行。如果你在标签中,你需要保持跟踪,如果你在标签中,则忽略这些字符

因此,循环遍历字符串html的每个字母。如果它是一个<你知道一个标记正在开始,否则如果它是一个>一个标记正在结束,如果它不是其中任何一个(其他任何东西),那么如果你没有将它添加到字符串中,那么检查你是否在标记(布尔标记)中。

string
在Java中是不可变的+你永远不会显示任何东西 我建议您在使用完
扫描仪后(作为最佳实践),关闭
扫描仪,并从用户的主目录中读取
HTML_1.txt
文件。关闭
的最简单方法是

当我运行上面的程序时,我得到
My web page
There are many pictures of my cat here,
as well as my very cool blog page,
which contains awesome
stuff about my trip to Vegas.
Here's my cat now:
String
在Java中是不可变的,您永远不会显示任何内容 我建议您在使用完
扫描仪后(作为最佳实践),关闭
扫描仪,并从用户的主目录中读取
HTML_1.txt
文件。关闭
的最简单方法是

当我运行上面的程序时,我得到
My web page
There are many pictures of my cat here,
as well as my very cool blog page,
which contains awesome
stuff about my trip to Vegas.
Here's my cat now:

就像生活中的大多数事情一样,有不止一种方法可以让它发挥作用,但主要的问题是

for (i = html.indexOf("<"); i < html.indexOf(">"); i++) {
    tag = true;
}

if (!tag) {
    for (i = 0; i < str.length; i++) {
        s += str[i];
    }
}
然后确保打印结果
System.out.println(stripHtmlTags(html))

另一个解决方案(效率更高)是从
字符串开始修剪所有
内容,直到
字符串
一无所有

StringBuilder html = new StringBuilder(text);
StringBuilder result = new StringBuilder(64);
int index = 0;
while (html.length() > 0) {

    int startIndex = html.indexOf(">");
    if (index == -1) {
        // Only plain text remaining...
        result.append(html.toString());
        html.delete(0, html.length());
    } else {
        html.delete(0, startIndex + 1);
        int endIndex = html.indexOf("<");
        if (endIndex > 0) {
            result.append(html.substring(0, endIndex));
            html.delete(0, endIndex);
        }
    }

}
return result.toString();

就像生活中的大多数事情一样,有不止一种方法可以让它发挥作用,但主要的问题是

for (i = html.indexOf("<"); i < html.indexOf(">"); i++) {
    tag = true;
}

if (!tag) {
    for (i = 0; i < str.length; i++) {
        s += str[i];
    }
}
然后确保打印结果
System.out.println(stripHtmlTags(html))

另一个解决方案(效率更高)是从
字符串开始修剪所有
内容,直到
字符串
一无所有

StringBuilder html = new StringBuilder(text);
StringBuilder result = new StringBuilder(64);
int index = 0;
while (html.length() > 0) {

    int startIndex = html.indexOf(">");
    if (index == -1) {
        // Only plain text remaining...
        result.append(html.toString());
        html.delete(0, html.length());
    } else {
        html.delete(0, startIndex + 1);
        int endIndex = html.indexOf("<");
        if (endIndex > 0) {
            result.append(html.substring(0, endIndex));
            html.delete(0, endIndex);
        }
    }

}
return result.toString();

一种小型递归方法

static String stripHtmlTags2(String html)
{           
    int startIndex = html.indexOf("<");
    int endIndex = html.indexOf(">");
    String stripedString = html;
    //Assuming an end for every start tag
    if (startIndex!=-1){
        stripedString = html.substring(0,startIndex);           
        stripedString = stripedString+html.substring(endIndex+1);
        stripedString = stripHtmlTags2(stripedString);
    }

    return stripedString;
}

一种小型递归方法

static String stripHtmlTags2(String html)
{           
    int startIndex = html.indexOf("<");
    int endIndex = html.indexOf(">");
    String stripedString = html;
    //Assuming an end for every start tag
    if (startIndex!=-1){
        stripedString = html.substring(0,startIndex);           
        stripedString = stripedString+html.substring(endIndex+1);
        stripedString = stripHtmlTags2(stripedString);
    }

    return stripedString;
}


首先,你从不将方法
stripHtmlTags
的结果分配给任何东西,也不显示任何东西检查答案:@krzysztofchichoki-看起来他们应该删除HTML标记,而不是转义它们?@yarivt:很抱歉,这没有多大帮助。如果他们在txt文件中有整个HTML页面,然后他们会将其剥离为零(如果要删除,而不是转义标记),因为所有页面都在标记中。首先,您不会将方法的结果
stripHtmlTags
分配给任何内容,也不会显示任何内容检查此答案:@KrzysztofCichocki-看起来他们应该删除HTML标记,不逃逸吗?@yarivt:很抱歉,但这没有多大帮助。如果他们的txt文件中有整个html页面,那么他们会将其剥离为零(如果要删除,则不会逃逸标记),因为所有页面都在标记中。你快疯了。没有打印任何东西,但也没有从方法中恢复任何东西。@Shahzeb:这确实是一个点。如果你回答正确,你会得到十个。这是一个评论,我决定多看看,但谢谢你的爱。无论出于何种原因,这是一种设置,需要更多的代表发表评论,然后提供解决方案。但你真的需要冷静下来。这是一个人在学习,你应该把他们推向正确的方向。那么指出一个问题有什么错或不好呢?其他问题并没有使这一点变得不真实。这里的问题是,你指出的问题不是问题所在。当然,没有打印任何内容,但这不是错误。你是对的,这不是问题,因为不止一个问题。你快疯了。没有打印任何东西,但也没有从方法中恢复任何东西。@Shahzeb:这确实是一个点。如果你回答正确,你会得到十个。这是一个评论,我决定多看看,但谢谢你的爱。无论出于何种原因,这是一种设置,需要更多的代表发表评论,然后提供解决方案。但你真的需要冷静下来。这是一个人在学习,你应该把他们推向正确的方向。那么指出一个问题有什么错或不好呢?其他问题并没有使这一点变得不真实。这里的问题是,你指出的问题不是问题所在。当然,没有打印任何内容,但这不是错误。你是对的,这不是问题,因为不止一个问题。谢谢!实际上我还没有学会StringBuilder,但我正在查找它。它看起来确实更实用。我没有关闭扫描仪的原因是因为我们的教授建议不要关闭扫描仪。他提到了以后它会如何引起问题。@JessicaFura你不应该
关闭
扫描仪
,它正在包装
系统。您应该
关闭
文件支持的
扫描仪
,否则会泄漏文件句柄。这在一个立即终止的程序中并不重要,但是
String[] parts = text.split("<(.*?)>");
StringBuilder sb = new StringBuilder(64);
for (String part : parts) {
    sb.append(part);
}
return result.toString();
static String stripHtmlTags2(String html)
{           
    int startIndex = html.indexOf("<");
    int endIndex = html.indexOf(">");
    String stripedString = html;
    //Assuming an end for every start tag
    if (startIndex!=-1){
        stripedString = html.substring(0,startIndex);           
        stripedString = stripedString+html.substring(endIndex+1);
        stripedString = stripHtmlTags2(stripedString);
    }

    return stripedString;
}
StringBuilder htmlFreeString = new StringBuilder();
while (input.hasNextLine())
  {
       String html = input.nextLine();
       htmlFreeString.append(stripHtmlTags2(html));
   }
 System.out.print(htmlFreeString.toString());