我有一个包含以下内容的文本文件: 鲍勃去了商店"商店去"买牛奶"买牛奶。
我想从string1删除所有引用的材料,因此它只包含:Bob去商店购买牛奶。
有没有办法在不使用正则表达式的情况下执行此操作?我目前正在尝试使用split()方法。我首先使用split()将文本文件读入名为string1的String变量,然后将值存储回名为newString的新字符串。
String string1 = new Scanner(new File("C:/bob.txt")).useDelimeter("\\A").next();
String newString = "";
String[] arr = string1.split("\"");
for (int i=0; i<arr.length-1; i++){
newString += arr[y];
}
我对java很新,不确定我是否正确使用了split方法。当我打印出newString时,它显示为&#34;鲍勃去商店购买牛奶&#34;
我的问题是应该说&#34;鲍勃去商店买牛奶。&#34;该字符串在结尾处缺少句点,并写入&#34;商店&#34;两次。
任何人都可以帮我做这项工作吗? (如果有一个比split()更好的方法,我想知道。我也希望它适用于任意数量的引用部分的字符串。也没有模式匹配/正则表达式)谢谢!
答案 0 :(得分:1)
这样可行:
public static void main(String[] args) {
String str = "Bob went to \"the store\" the store to \"buy milk\" buy milk.";
boolean inQuotes = false;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '"') inQuotes = !inQuotes;
else if (!inQuotes) sb.append(str.charAt(i));
}
System.out.println(sb.toString());
}
请注意,结果"Bob went to the store to buy milk."
在to the store
和to buy milk
之间有两个空格,因为它只删除了引号之间的内容。
答案 1 :(得分:0)
您可以使用Java 8的marketplace/Model/Datasource/DboSource
流式传输stream
的{{1}},并通过character array
跳过双引号,例如:
string
另一种方法是简单地遍历filter
数组并跳过双引号,例如:
String s = "Bob blah blah \"quote\" blah \"another quote\"";
System.out.println(s);
String string = s.chars()
.filter(c -> c != '"')
.collect(StringBuilder::new,
StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
System.out.println(string);