如何在Java中搜索字符串中的子字符串,直到找到指定的字符为止?
例如,让我们看一个字符串 {“你好”:“世界”} 还有一根绳子 {“你好”:“你好”} 我想在冒号(:)之前的第一个字符串中搜索hello 但我的代码是查找并返回具有指定查询字符串的字符串,而不是仅在冒号之前具有查询字符串的字符串,即左侧部分 这里的列表包含字符串列表如何在Java中搜索字符串中的子字符串,直到找到指定的字符为止?,java,Java,例如,让我们看一个字符串 {“你好”:“世界”} 还有一根绳子 {“你好”:“你好”} 我想在冒号(:)之前的第一个字符串中搜索hello 但我的代码是查找并返回具有指定查询字符串的字符串,而不是仅在冒号之前具有查询字符串的字符串,即左侧部分 这里的列表包含字符串列表 for(int i = 0; i < list.size; i++) { if(list.get(i).contains(query)) list.remove(i); } for(int i=0;i
for(int i = 0; i < list.size; i++)
{
if(list.get(i).contains(query))
list.remove(i);
}
for(int i=0;i
这意味着它将查找第一个出现的字符串,该字符串包含指定的查询,但在指定的字符出现之前不会找到该字符串。如果该字符串是JSON文件的一部分,则应使用JSON解析器。如果没有,您可以按如下方式使用Java正则表达式API:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String input = "{\"hello\":\"world\"}";
Matcher matcher = Pattern.compile("\\w+(?=.*:)").matcher(input);
if (matcher.find()) {
System.out.println(matcher.group());
}
}
}
输出:
hello
正则表达式的解释:
hello
\w+
指定一个或多个(?=*:)
为*:
指定,其中*
指定任意字符数。
指定任何字符,并且*
用作、零次或多次:
指定字符文字,:
如果字符串是JSON文件的一部分,则应使用JSON解析器。如果没有,您可以按如下方式使用Java正则表达式API:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String input = "{\"hello\":\"world\"}";
Matcher matcher = Pattern.compile("\\w+(?=.*:)").matcher(input);
if (matcher.find()) {
System.out.println(matcher.group());
}
}
}
输出:
hello
正则表达式的解释:
hello
\w+
指定一个或多个(?=*:)
为*:
指定,其中*
指定任意字符数。
指定任何字符,并且*
用作、零次或多次:
指定字符文字,:
为什么不使用JSON库解析JSON字符串?如果您试图读取JSON,是否尝试过使用JsonPath之类的库?这可能会使事情变得更简单,因为这些字符串存储在一个文本文件中,该文件将采用stringsJSON的形式,因此它通常作为字符串检索,您可以将其解析为JSON以获取对象(或数组或原语)。如果你想要一个类比,想象你正在读一个包含数字的文件。当然,您首先要阅读一个字符串,但是将它转换为numberd的相关子类会更有帮助。这是否回答了您的问题?为什么不使用JSON库解析JSON字符串?如果您试图读取JSON,是否尝试过使用JsonPath之类的库?这可能会使事情变得更简单,因为这些字符串存储在一个文本文件中,该文件将采用stringsJSON的形式,因此它通常作为字符串检索,您可以将其解析为JSON以获取对象(或数组或原语)。如果你想要一个类比,想象你正在读一个包含数字的文件。当然,您首先要阅读一个字符串,但是将它转换为numberd的相关子类会更有帮助。这是否回答了您的问题?我明白了,但假设有一个字符串列表,如果我想在列表元素中搜索一个子字符串并执行上面的操作,我该怎么做?@初学者-在这种情况下,您只需要将整个内容放入循环中,迭代列表,即(字符串输入:列表){Matcher Matcher=Pattern.compile(\\w+(?=*:)).matcher(input);if(matcher.find()){System.out.println(matcher.group());}我明白了,但假设有一个字符串列表,如果我想在列表元素中搜索一个子字符串并执行上面的操作,我该怎么做?@noveler-在这种情况下,您只需要将整个内容放入循环中,迭代列表,即(字符串输入:列表){Matcher Matcher=Pattern.compile(\\w+(?=*:))”).Matcher(输入);if(Matcher.find()){System.out.println(Matcher.group());}