从文件读取的Java代码应读取完整文件,但不读取

时间:2019-06-21 16:31:10

标签: java

Java代码从文件检查中读取带有大括号的单词,然后写入没有大括号的单词

代码可以正常工作,因为它读取文件并显示不带括号的单词,但它的文件很大,有四百行,但结果仅显示几行,这意味着代码可以读取文件并写入不带花括号的单词,但不会遍历整个文件

更改了常规的表示形式,但这很好,因为它可以读取任何带有大括号的单词,并写入不带有大括号的单词

需要验证的代码

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;

public class StringUtilitiesFromFile  {
public static void main(String[] args) throws IOException 
        {
                String Android = "Android is CS and (OS)";
                String OS = Android.replaceAll("\\(.*\\)", "");  
                System.out.println("Android " + OS);
       }

}

结果是Android Android是CS,并且没有带有括号的打印(OS)

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;

public class StringUtilitiesFromFile  {
    public static void main(String[] args) throws IOException 
        {
              File file = new File("Auth.html");
        String string = FileUtils.readFileToString(file);  
                String And = string.replaceAll("\\(.*\\)", "");  
        System.out.println(And);    
                System.out.println("");           
       }
}

结果是: 大街 胡子 下面 船 界 明亮的预算生成器隔板商人商人女商人屠夫 笼碳 致癌卡慎用 洞穴 特性 首席 首席黏土 清洁教练 煤 自在 消费品 联系 勇气 勇气,胆识,法庭堂兄,掩饰残酷 辩论被告辩护辩护赤字 定义

大约二十四行,但实际文件包含大约四百行

文件中包含文字 能力(名词)能(形容词)关于(介词)关于(副词)以上(副词)以上(介词)国外(副词)缺席(名词)缺席(形容词)绝对(形容词)抽象(形容词)滥用(动词)滥用(名词)滥用学术(形容词)接受(动词)可接受(形容词)接受访问(动词)访问(名词)伴随(动词)符合(到)介词(动词)账户(名词)会计准确(形容词)a(不定冠词)放弃(动词)能力(名词)能(形容词)关于(介词)关于(副词)以上(副词)以上(介词)国外(副词)缺席(名词)缺席(形容词)绝对(形容词)抽象摘要(形容词)滥用(动词)滥用(名词)辱骂学术(形容词)接受(动词)可接受(形容词)接受访问(动词)访问(名词)伴随(动词)依(到)介词(动词)账户(名词)会计准确(形容词)指责疼痛(名词)疼痛达到(动词)获得(动词)横跨(副词)横跨(介词)动作(动词)动作(名词)动作(名词)活动活动(名词)演员女星实际(形容词)实际(副词)适应(动词)加(动词)加法(名词)附加(形容词)地址(名词)地址(动词)适当的(形容词)休会调整(动词)管理(名词)钦佩(动词)接纳(名词)承认(动词)领养(动词)领养成人(名词)成人(形容词)推进(名词)推进(动词)优势(名词)冒险(名词)冒险广告(动词)广告(名词)忠告(动词)外遇(名词)影响(动词)感情深情地承受(动词)害怕(形容词)后(副词)后(连词)后(介词(再次)下午(副词)反对(介词)年龄(名词)年龄(动词)中介(名词)中介(名词)激进的前同意(动词)同意(名词)前面的农业(副词)援助(动词)援助(名词) )目标(名词)目标(动词)空中交通管制员飞机(名词)机场(名词)过道警报(动词)警报(名词)警报(名词)警报(adjec tive)警报(动词)alibi lim养费活着(形容词)all(副词)all(代词)all(形容词)all right(副词)all right(形容词)

行数更多;代码应仅读取不带大括号的单词并编写

1 个答案:

答案 0 :(得分:1)

我认为您的正则表达式可能会遇到麻烦。

您正在尝试剔除与此匹配的所有字符:\(.*\)。问题在于字符“(”和“)”也匹配.*,因此您的表达式匹配( + 任何内容,包括括号 + ),并且这很可能会消除您不愿删除的所有单词。

一种解决方案是使用勉强的量词而不是贪婪的量词。 使用*?代替*来实现此目的。它将匹配满足您的正则表达式的最小字符数。 另一种选择是像在\([^()]*\)中一样,在正则表达式中明确排除括号。

尝试一下:

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;

public class StringUtilitiesFromFile  {
    public static void main(String[] args) throws IOException 
        {
              File file = new File("Auth.html");
        String string = FileUtils.readFileToString(file);  
                String And = string.replaceAll("\\(.*?\\)", "");  
        System.out.println(And);    
                System.out.println("");           
       }
}

转到RegexPlanet之类的正则表达式测试器来解决问题。

请参阅Greedy vs. Reluctant Quantifiers的文档