Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java检查另一个字符串中的一个字符串_Java - Fatal编程技术网

Java检查另一个字符串中的一个字符串

Java检查另一个字符串中的一个字符串,java,Java,我通过ICY接收收音机播放机中的元信息。 下面是一个简短的示例,展示了这一点: die neue welle - Der beste Musikmix aus 4 Jahrzehnten! - WELSHLY ARMS - SANCTUARY - Der Mehr Musik-Arbeitstag mit Benni Rettich 元信息流的另一个例子是: SWR1 Baden Württemberg 或 现在我需要从那里提取标题,问题是这个“元信息”字符串可以有任何格式。 据我所知:

我通过ICY接收收音机播放机中的元信息。
下面是一个简短的示例,展示了这一点:

die neue welle - Der beste Musikmix aus 4 Jahrzehnten! - WELSHLY ARMS - SANCTUARY - Der Mehr Musik-Arbeitstag mit Benni Rettich  
元信息流的另一个例子是:

SWR1 Baden Württemberg

现在我需要从那里提取标题,问题是这个“元信息”字符串可以有任何格式。 据我所知:

-我知道完整的元信息字符串,如第一个代码部分所示
-我知道电台的名字,它是由另一家冰冷的地产公司提供的

第一种方法是检查字符串是否包含电台名称(我认为如果不包含,则必须是标题):

但是,如果标题和电台都出现在标题字符串中,这对我没有帮助。
是否有一种模式与后跟斜杠、反斜杠或连字符再后跟另一个字符串的字符串相匹配


有人遇到过类似的问题吗?

因为您没有规范,每个电台可以发送不同的格式。我不会试图找到一个“完美”的模式,而是简单地创建一个映射来存储每个站点的格式正则表达式以恢复标题

首先,创建一张地图

Map<String, String> stationPatterns = new HashMap<>();
然后,您只需要获得这个模式(您总是可以找到一个捕获组)

这样,您只需要获取一个模式,从
字符串中提取标题

Pattern pattern = Pattern.compile(getPattern(stationSelected));
Matcher matcher = pattern.matcher(title);
if (matcher.find()) {
    System.out.println("Title : " + matcher.group(1));
} else {
    System.err.println("The title doesn't match the format");
}

只是这部分代码是相当冗余的。您不需要StringBuilder,只需使用b:StringBuilder=new StringBuilder();附加(b);如果(builder.toString().toLowerCase().contains(abuilder.toString().toLowerCase()){return false;}至于你的问题,我想正则表达式是你最好的选择。感谢字符串生成器的提示,这种方法让我丧命:D。我还认为它应该是正则表达式“现在我需要从那里提取标题,问题是这个‘元信息’字符串可以有任何格式“即使您知道电台名称,您如何根据电台名称找到标题?Regex甚至你的方式仍然要求你对你能接收的格式有一个最低限度的了解。没有规定,每个电台都可以根据自己的喜好发送。我只知道两个选项:在标题和电台anme之间交换(实际上已经涵盖)和我在第一个代码片段中展示的那个。哇,这真是个好主意!谢谢,像这样的润肤露会更容易管理。顺便说一句:我只给了你提取数据的方法。是的,我知道,但是如果你能为每一组模式使用正则表达式,我不需要硬核的“一体式”解决方案。注意:与其使用“System.err.println(“标题与格式不匹配”);“-不如记录不匹配的标题(到某种持久性状态)然后随着时间的推移检查您的代码,为异常添加新模式。@J_D实际上,我只是做了一个错误输出,指定可以在这里管理它。这不是复制粘贴供使用。另外,如果正则表达式无效,我还将从
Pattern.compile
捕获异常。
Map<String, String> stationPatterns = new HashMap<>();
stationPatterns.put("station1", "(.*)");
stationPatterns.put("station2", "station2 - (.*)");
...
public String getPattern(String station){
    return stationPatterns.getOrDefault(station, "(.*)"); //Use a default value to get everything)
}
Pattern pattern = Pattern.compile(getPattern(stationSelected));
Matcher matcher = pattern.matcher(title);
if (matcher.find()) {
    System.out.println("Title : " + matcher.group(1));
} else {
    System.err.println("The title doesn't match the format");
}