繁体   English   中英

如何从字符串中删除引号中的子字符串? (没有正则表达式)

[英]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 storeto 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM