[英]How do I find multiple substrings from one string using regex in Java?
[英]How do I remove substrings in quotations from a string? (Without Regex)
我有一个包含以下内容的文本文件:Bob到“商店”商店“购买牛奶”购买牛奶。
我想从string1中删除所有引用的材料,所以它只包含:Bob到商店购买牛奶。
有没有一种方法可以不使用Regex? 我目前正在尝试使用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时,其内容为“鲍勃去商店买牛奶的商店”
我的问题是应该说“鲍勃去商店买牛奶”。 该字符串末尾缺少句点,并且它两次写入“存储”。
谁能帮助我完成这项工作? (如果有一种比split()更好的方法,我想知道。我也希望它适用于带有任意数量的带引号的节的字符串。也没有模式匹配/正则表达式)谢谢!
那会工作:
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
之间有两个空格,因为它只是删除了报价之间的空格。
您可以使用Java 8的stream
来流经string
character array
,并通过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);
另一种方法是简单地遍历char
数组并跳过双引号,例如:
String s = "Bob blah blah \"quote\" blah \"another quote\"";
System.out.println(s);
StringBuilder s1 = new StringBuilder();
for(char c : s.toCharArray()){
if(c != '"'){
s1.append(c);
}
}
System.out.println(s1.toString());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.