当前位置: 首页 > 知识库问答 >
问题:

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

郑狐若
2023-03-14

我有一个文本文件,其中包含以下内容:鲍勃去“商店”商店“买牛奶”买牛奶。

我想删除string1中所有引用的内容,使其只包含:Bob去商店买牛奶。

有没有一种不用正则表达式就能做到这一点的方法?我目前正在尝试使用split()方法。我首先使用split()将文本文件读入名为string1的字符串变量,然后将值存储回名为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方法。当我打印新闻时,上面写着“鲍勃去商店买牛奶”

我的问题是,它应该说“鲍勃去商店买牛奶。”字符串缺少结尾的句点,它写了两次“The store”。

有人能帮我做这个工作吗?(如果有比分裂更好的方法()我想知道。我也希望它能为一个有任意数量引用部分的字符串工作。也没有模式匹配/正则表达式)谢谢!

共有2个答案

夹谷宜民
2023-03-14

您可以使用Java 8的字符串字符数组中进行流,并通过过滤器跳过双引号,例如:

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());
翟奇
2023-03-14

这将奏效:

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去商店买牛奶了."to the storeto Buy牛奶之间有两个空格,因为它只是删除引号之间的内容。

 类似资料:
  • 我正在创建一个单词替换脚本。我遇到了一个路障,忽略引号之间的字符串,并且在这里找不到一个不涉及正则表达式的体面解决方案。 我有一个工作片段,它循环遍历字符串中的每个字符,并计算出最近的报价是开始报价还是结束报价(无论是单引号还是双引号),并忽略转义报价。问题是,为了提供100%准确的体验,它必须在每次字符串更改时运行(由于它的工作方式,它可以在单个函数中更改60K次),并且由于字符串长度的可能性,

  • 问题内容: 我有一个清单 我正在尝试删除其超字符串已经在列表中的字符串。在这种情况下,结果应为: 我已经写了代码: 但它似乎不起作用。我读过,我们无法在列表上进行迭代时将其删除。因此,副本,而这是我的原始列表。 问题答案: l=[‘abc’,’abcdef’,’def’,’defdef’,’polopolo’] print [j for i, j in enumerate(l) if all(j

  • 问题内容: 如何在Java中从给定的字符串中删除所有方括号(“ []”)? 在这种情况下将使用什么正则表达式? 问题答案: 使用这个:

  • 问题内容: 我有以下字符串作为输入: 最终输出将如下所示: 也就是说 ,将删除所有前导零和尾随零,并且正/负零都将简单地为零。 我们可以通过首先分割字符串并为每个部分使用Regex来实现。但是 我的字符串大小超过10000 。 我们怎样才能做到这一点呢? 编辑: 答案分析: 我已经用String测试了所有答案,并且 Wiktor Stribiewew的 答案通过了所有测试用例。(请参阅此处:htt

  • 我有以下字符串作为输入: 最终输出将是这样的: i、 e.所有前导零和尾随零将被删除,正/负零将仅为零。 我们可以通过首先拆分字符串并对每个部分使用Regex来实现这一点。但是我的字符串大小超过10000。 我们如何使用实现这一点? 编辑: 答案分析: 我用字符串测试了所有的测试用例。(见此处:https://regex101.com/r/tS8hE3/9)其他答案在大多数案例中都得到了通过,但不

  • 这是我之前问题的后续。我意识到我需要更具体地说明我的regex案例,以获得适用于我的案例的答案。 我已经与这个正则表达式斗争了很长一段时间(也使用我上一个问题的答案),我似乎无法构建我需要的东西。 我需要将所有字符串中出现的两个重复出现的单引号替换为(因此字符串内部意味着单引号)。这是因为在一种语言(语法)中,字符串中的引号使用<code>‘转义。 这里有一个例子(实际的例子可以包含用< code