【问题标题】:Assigning the output as a new String将输出分配为新字符串
【发布时间】:2021-04-12 02:24:38
【问题描述】:

我正在尝试将此代码的输出分配为新的字符串变量,目前,输出是从 for 循环打印的,我正在使用拆分/标记将每个“,”更改为“>”。我想要的输出是正确的,但我想在之后使用分隔符“>”将每一行分成单独的类别。 这是我的代码...

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class tests {

    public static void main(String[] args) throws IOException {
        String fileContent = "";
        String number = "";
        try {
        Scanner file = new Scanner(new File("netflix_titles.txt")); 
        while(file.hasNextLine()){
            fileContent = fileContent.concat(file.nextLine() + "\n");
        }
        
            String[] tokens = fileContent.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", -1);
            for(String t : tokens) {
                System.out.print("> " + t);
            }
        }
        catch(Exception e){
            System.out.println("invalid input");
        }   
    }
}

文件的第一行是

s1,电视节目,3%,”João Miguel, Bianca Comparato, Michel Gomes, Rodolfo 瓦伦特,瓦内扎奥利维拉,拉斐尔洛萨诺,薇薇安波尔图,梅尔 弗朗科维亚克、塞尔吉奥·曼贝蒂、泽泽·莫塔、塞尔索 Frateschi”,巴西,“2020 年 8 月 14 日”,2020,TV-MA,4 四季,“国际电视节目,电视剧,电视科幻与奇幻”,“In a 未来精英居住在远离拥挤的岛屿天堂 贫民窟,你有机会加入从肮脏中节省下来的 3%。”

代码编译后的样子

s1> 电视节目> 3%> > “若奥·米格尔、比安卡·康帕拉托、米歇尔·戈麦斯、 鲁道夫·瓦伦特,瓦内扎·奥利维拉,拉斐尔·洛萨诺,薇薇安·波尔图,梅尔 Fronckowiak, Sergio Mamberti, Zezé Motta, Celso Frateschi">巴西> 《2020 年 8 月 14 日》> 2020> TV-MA> 4 Seasons> 《国际电视节目、电视 戏剧、电视科幻与奇幻 > “在精英居住的未来 远离拥挤贫民窟的岛屿天堂,你有机会加入 从肮脏中节省的 3%。”

我希望之后能够使用 ">" 分隔符为每一行创建一个对象,其中每个构造函数由 > 分隔。由于它仅通过 for 循环输出,因此我不确定在输出后如何使用分隔符。 抱歉,如果这令人困惑,我不确定如何正确表达。

【问题讨论】:

    标签: java csv split token delimiter


    【解决方案1】:

    一种方法是将以下正则表达式模式与 Java 模式匹配器一起使用:

    (\".*?\"|[^,]*),?
    

    这个正则表达式模式将首先尝试匹配一个双引号内可能也有逗号的术语。如果失败,它将回退到匹配任何 CSV 术语到逗号,只捕获内容,而不是逗号。这是一个使用您的示例输入的简短脚本:

    String input = "s1,TV Show,3%,,\"João Miguel, Bianca Comparato, Michel Gomes, Rodolfo Valente, Vaneza Oliveira, Rafael Lozano, Viviane Porto, Mel Fronckowiak, Sergio Mamberti, Zezé Motta, Celso Frateschi\",Brazil,\"August 14, 2020\",2020,TV-MA,4 Seasons,\"International TV Shows, TV Dramas, TV Sci-Fi & Fantasy\",\"In a future where the elite inhabit an island paradise far from the crowded slums, you get one chance to join the 3% saved from squalor.\"";
    
    Pattern p = Pattern.compile("(\".*?\"|[^,]*),?");
    Matcher m = p.matcher(input);
    StringBuffer buffer = new StringBuffer();
    
    while(m.find()) {
        String replacement = "";
        if (buffer.length() > 0) replacement = "> ";
        if (m.group(1).length() > 0) m.appendReplacement(buffer, replacement + m.group(1));
    }
    m.appendTail(buffer);
    System.out.println(buffer.toString());
    

    打印出来:

    s1> 电视节目> 3%> > “若昂·米格尔、比安卡·康帕拉托、米歇尔·戈麦斯、鲁道夫·瓦伦特、瓦内扎·奥利维拉、拉斐尔·洛萨诺、薇薇安·波尔图、梅尔·弗朗科维亚克、塞尔吉奥·曼贝蒂、泽泽·莫塔、塞尔索·弗拉泰斯基 > 巴西>” 2020 年 8 月 14 日"> 2020> TV-MA> 4 Seasons> "国际电视节目、电视剧、电视科幻和奇幻电影"> "在远离拥挤贫民窟的精英们居住的岛屿天堂的未来,你会得到一次机会加入从肮脏中节省下来的 3%。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      • 2019-05-22
      • 2012-04-03
      • 2022-01-08
      • 2019-03-25
      相关资源
      最近更新 更多