我正在尝试获取tvg-logo字符串(http://awebsite/logos/TestChannel.png),但我目前的代码仅适用于案例一。对于案例2和3输入,代码不仅输出tvg-logo值,还输出其余的在它之后的字符串!你能告诉我如何在所有这些情况下获得 ONLY tvg-logo网址吗?谢谢
public class HelloWorld {
public static void main(String[] args) {
//case 1:
//String s="-1 tvg-name=\"Test Channel\" tvg-logo=\"http://awebsite/logos/TestChannel.png\"";
//case 2:
//String s="-1 tvg-name=\"Test Channel\" tvg-logo=\"http://awebsite/logos/TestChannel.png\" group-title=\"Movies\"";
//case 3:
String s="-1 tvg-logo=\"http://awebsite/logos/TestChannel.png\" tvg-name=\"Test Channel\" group-title=\"Movies\"";
String icon = s.substring(s.indexOf("tvg-logo") + "tvg-logo".length()).replace("=", "").replace("\"", "").replace("\n", "");
System.out.println("Logo:"+icon);
}
}
案例3输入的输出:
Logo:http://awebsite/logos/TestChannel.png tvg-nameTest Channel group-titleMovies
所有类型输入案例的预期输出:
Logo:http://awebsite/logos/TestChannel.png
答案 0 :(得分:1)
您需要向substring
调用添加第二个参数以限制子字符串的长度,如下所示:
public class Main {
public static void main(final String[] args) {
// case 1:
// String s = "-1 tvg-name=\"Test Channel\"
// tvg-logo=\"http://awebsite/logos/TestChannel.png\"";
// case 2:
String s =
"-1 tvg-name=\"Test Channel\" tvg-logo=\"http://awebsite/logos/TestChannel.png\" group-title=\"Movies\"";
// case 3:
// String s =
// "-1 tvg-logo=\"http://awebsite/logos/TestChannel.png\" tvg-name=\"Test
// Channel\" group-title=\"Movies\"";
String tvgLogo = "tvg-logo=\"";
int tvgLogoIndex = s.indexOf(tvgLogo) + tvgLogo.length();
String icon = s.substring(tvgLogoIndex, s.indexOf('"', tvgLogoIndex)).replace("=", "")
.replace("\"", "").replace("\n", "");
System.out.println("Logo:" + icon);
}
}
s.indexOf('"', tvLogoIndex)
调用会搜索关闭tvg-logo属性的双引号,以便您只选择徽标网址。
请注意,如果您正在解析HTML文档,那么解决方案可能比使用子字符串更清晰。
答案 1 :(得分:1)
这是使用正则表达式的另一个。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HelloWorld {
public static void main(String[] args) {
String s="-1 tvg-logo=\"http://awebsite/logos/TestChannel.png\" tvg-name=\"Test Channel\" group-title=\"Movies\"";
// Pattern matcher looking for shortest string surrounded with escaped quotes
// following tvg-logo=\"
// Two groups, first is string tvg-logo and second is the logo string
Matcher tvgMatcher = Pattern.compile("(tvg-logo)=\\\"([^\\\"]+)\\\"").matcher(s);
while (tvgMatcher.find()) {
String icon = tvgMatcher.group(2);
System.out.println(tvgMatcher.group(1)+": "+icon);
}
}
}
输出
tvg-logo: http://awebsite/logos/TestChannel.png
答案 2 :(得分:0)
public class HelloWorld
{
public static void main (String[] args) throws java.lang.Exception
{
//case 1:
//String s="-1 tvg-name=\"Test Channel\" tvg-logo=\"http://awebsite/logos/TestChannel.png\"";
//case 2:
//String s="-1 tvg-name=\"Test Channel\" tvg-logo=\"http://awebsite/logos/TestChannel.png\" group-title=\"Movies\"";
//case 3:
String s="-1 tvg-logo=\"http://awebsite/logos/TestChannel.png\" tvg-name=\"Test Channel\" group-title=\"Movies\"";
String icon="";
String[] splited = s.split("\\s+");
for(int i=0;i<splited.length;i++){
if(splited[i].contains("tvg-logo")){
icon = splited[i].substring(10);
}
}
//String icon = s.substring(s.indexOf("tvg-logo") + "tvg-logo".length()).replace("=", "").replace("\"", "").replace("\n", "");
System.out.println("Logo:"+icon);
}
}
答案 3 :(得分:0)
您可以插入该行 icon = icon.substring(0,icon.indexOf(“”)); 提取它。
public static void main(String [] args){
//case 1:
//String s="-1 tvg-name=\"Test Channel\" tvg-logo=\"http://awebsite/logos/TestChannel.png\"";
//case 2:
//String s="-1 tvg-name=\"Test Channel\" tvg-logo=\"http://awebsite/logos/TestChannel.png\" group-title=\"Movies\"";
//case 3:
String s="-1 tvg-logo=\"http://awebsite/logos/TestChannel.png\" tvg-name=\"Test Channel\" group-title=\"Movies\"";
String icon = s.substring(s.indexOf("tvg-logo") + "tvg-logo".length()).replace("=", "").replace("\"", "").replace("\n", "");
icon=icon.substring(0,icon.indexOf(".png")+4);
System.out.println("Logo:"+icon);
}
答案 4 :(得分:0)
如果我是对的,这就是你的代码中发生的事情:
最后,您的代码会对案例1过度拟合。 在每个案例的每个字符串中保持相同的顺序,并管理字符串末尾有group-title的情况。
试试这个(我没试过):
boolean groupFound = false;
//case 1:
//String s="-1 tvg-name=\"Test Channel\" tvg-logo=\"http://awebsite/logos/TestChannel.png\"";
//case 2: {
//String s="-1 tvg-name=\"Test Channel\" tvg-logo=\"http://awebsite/logos/TestChannel.png\" group-title=\"Movies\"";
//groupFound = true;}
//case 3: {
String s="-1 tvg-name=\"Test Channel\" tvg-logo=\"http://awebsite/logos/TestChannel.png\" group-title=\"Movies\"";
groupFound = true; }
String icon = s.substring(s.indexOf("tvg-logo") + "tvg-logo".length()).replace("=", "").replace("\"", "").replace("\n", "");
if(groupFound){
String group = "group-title";
int groupIndex = String.indexOf(group);
String newIcon = icon.substring(0, groupIndex);
}