Java - 使用分隔符不删除特殊字符

时间:2016-10-17 10:55:28

标签: java

文本文件包含以下数据。我希望删除' $'从文本文件的每一行。我还希望将名称,饮料和成本存储在变量中以供将来操作。但是,这可以在以后执行。我不明白我的代码有什么问题,这是 文本文件数据:

使用Regex转义模式解决了问题。我不得不更换" $"用" \ s * \ $ \ s *"

Rubin$Vodka$55
Alex$Gin$22
Max$Water$FREE

代码:

  File filename = new File("animals2.txt");        
        try{
        Scanner sc = new Scanner(filename);
        String line = sc.nextLine();
        Scanner linesc = new Scanner(line).useDelimiter("$");

        while(linesc.hasNext()){
            String name = linesc.next();
            txaDisplay.append(name + "\n");

        }
    }
    catch(Exception e){
                    e.printStackTrace();
    }

7 个答案:

答案 0 :(得分:4)

只需更改此行代码:

 Scanner linesc = new Scanner(line).useDelimiter("\\s*\\$\\s*");

您需要传递一个转义$符号的正则表达式模式。

答案 1 :(得分:1)

你可以试试这个..

File filename = new File("animals2.txt");        
    try{
    Scanner sc = new Scanner(filename);

    while(sc.hasNext())
    {
        StringBuffer txaDisplay = new StringBuffer();
         String line = sc.nextLine();
         StringTokenizer linesc = new StringTokenizer(line,"/($)/g");

         while(linesc.hasMoreElements()){
            String name = linesc.nextToken();
            txaDisplay.append(name+" ");
         }
         System.out.println(txaDisplay);
    }
  }
  catch(Exception e){
    e.printStackTrace();
  }

答案 2 :(得分:0)

使用split的{​​{1}}方法。你无法完成扫描仪的尝试。

String

作为旁注,请勿使用StringTokenizer。以下是文档说的内容:

  

StringTokenizer是为保持兼容性而保留的旧类   原因虽然在新代码中不鼓励使用它。建议   任何寻求此功能的人都使用String的split方法   或者改为java.util.regex包。

答案 3 :(得分:0)

试试这个

        try {
        File file = new File("animals2.txt");
        List<String> lines = Files.readAllLines(file.toPath(), StandardCharsets.UTF_8);
        for(String s: lines)
        {
            String str[] = s.split("$");
            for(int i = 0; i < str.length; i++)
            {
                 txaDisplay.append(str[i] + "\n");
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

答案 4 :(得分:0)

如果可以,请使用Guava的Splitter

File filename = new File("animals2.txt");
final Splitter dollarSplitter = Splitter.on('$'); // checks for the char, not the regex.
try (Scanner sc = new Scanner(filename)) {
  String line = sc.nextLine();
  for (String name: dollarSplitter.split(line)) {
    txaDisplay.append(name + "\n");
  }
} catch(Exception e) {
  e.printStackTrace();
}

答案 5 :(得分:0)

以下是正确使用分隔符在每一行上正确循环的方法:(基于您的代码)

Scanner sc = null, scLine = null;
    try{
        sc = new Scanner(new File("./test.txt")); //CHANGE THE FILE HERE

        String s;
        while(sc.hasNext()){
            scLine = new Scanner(sc.nextLine());
            scLine.useDelimiter("\\$");
            while(scLine.hasNext()){
                s = scLine.next();
                System.out.println(">" + s); //HERE YOU NEED TO APPEND INTO YOUR INSTANCE
            }
            System.out.println("#"); //AND REMOVE THIS LINE. I WORKED IN CONSOLE TO TEST THIS
            scLine.close();
        }
        sc.close();
    } catch (Exception e){
        e.printStackTrace();
    } finally {
        if(scLine != null) scLine.close();
        if(sc != null) sc.close();
    }

第一个循环设计用于读取文件的每一行。 对于每一行,您使用扫描程序将使用正则表达式根据$符号拆分行。

可以使用String.split("")方法完成此操作,但我将您的设计保留在此处。 (拆分使用正则表达式但在开头和结尾删除空单元格。)

当然,您需要正确关闭每个扫描仪。所以在循环期间和最后的异常情况下。

答案 6 :(得分:-2)

    private static void COMDataStream_Price(int SymbolNr, float Price, float Volume, DateTime Time)
    { // my code goes here }