文本文件包含以下数据。我希望删除' $'从文本文件的每一行。我还希望将名称,饮料和成本存储在变量中以供将来操作。但是,这可以在以后执行。我不明白我的代码有什么问题,这是 文本文件数据:
使用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();
}
答案 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 }