gpt4 book ai didi

java - 查找字符串中不在双引号之间的字符

转载 作者:行者123 更新时间:2023-12-01 09:50:55 25 4
gpt4 key购买 nike

我想查找特定字符的出现次数,但要搜索的字符串不能位于引号之间:

示例:

"this is \"my\" example string" 

如果您查找字符“m”,那么它应该只从“example”返回“m”的索引,因为另一个“位于双引号之间。

另一个例子:

"th\"i\"s \"is\" \"my\" example string"

我期待类似的事情:

public List<Integer> getOccurrenceStartIndexesThatAreNotBetweenQuotes(String snippet,String stringToFind);

一种“天真的”方法是:

  • 获取snippet中stringToFind的所有起始索引

  • 获取代码片段中所有引号的索引

  • 根据 stringToFind 的起始索引,因为您有引号的位置,所以您可以知道是否在引号之间。

有更好的方法吗?

编辑:

我想要检索什么?匹配的索引。

几件事:

  • 要搜索的字符串中可以有多个带引号的内容:"th\"i\"s\"is\"\"my\"example string"

  • 在字符串中:"th\"i\"s\"is\"\"my\"示例字符串"、"i"、"is"和 "my"位于引号之间。

  • 不限于字母和数字,我们可以有 ';:()_-=+[]{} 等...

最佳答案

这是一种解决方案:

算法:

  1. 查找字符串中的所有“死区”区域(例如,由于位于引号内而不受限制的区域)
  2. 查找字符串包含相关搜索字符串的所有区域(代码中的 hitZones)。
  3. 仅保留 hitZones 中不包含在任何 deadZones 中的区域。我会把这部分留给你:)

import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class FindStrings
{
// Just a simple model class for regions
static class Pair
{
int s = 0;
int e = 0;

public Pair (int s, int e)
{
this.s = s;
this.e = e;
}

public String toString ()
{
return "[" + s + ", " + e + "]";
}
}

public static void main(String[] args)
{
String search = "other";

String str = "this is \"my\" example other string. And \"my other\" this is my str in no quotes.";

Pattern p = Pattern.compile("\"([^\"]*)\"");
Matcher m = p.matcher(str);

List<Pair> deadZones = new ArrayList<Pair>();
while (m.find())
{
int s = m.start();
int e = m.end();
deadZones.add(new Pair(s, e - 1));
}

List<Pair> hitZones = new ArrayList<Pair>();
p = Pattern.compile(search);
m = p.matcher(str);
while (m.find())
{
int s = m.start();
int e = m.end();
hitZones.add(new Pair(s, e - 1));
}

System.out.println(deadZones);
System.out.println(hitZones);
}
}

注意:hitZones 中所有 Pairss 组件,但不在 内deadZones,最终将是您想要的。

关于java - 查找字符串中不在双引号之间的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37605943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com