解析字符串以获取某些子字符串

时间:2016-01-12 04:40:52

标签: java regex string

所以我现在拥有的是这个长字符串,其中包含许多子字符串,但我想解析所有以" http"开头的子字符串。

所以说我的字符串如下:

  

"艺术家":" Idina Menzel","追踪":"让它   去""文件":" http://madeupwebsite.com" ......

这个重复说再多说20次。这意味着我还要再解析20个网站。

最后,目标是拥有一个包含所有网站的arrayList。

我一直在查看一些网站我认为最好的方法是使用正则表达式,但我对动态字符串解析不太熟悉。

2 个答案:

答案 0 :(得分:-1)

您可以使用正则表达式执行以下操作:

 String line1 = "\"artist\":\"Idina Menzel\",\"track\":\"Let It Go\",\"file\":\"http://madeupwebsite.com\"";
 String line2 = "\"artist2\":\"Idina Menzel\",\"track\":\"Let It Go\",\"file\":\"http://madeupwebsite2.com\"";
 //You use any string as source

 Pattern pattern = Pattern.compile("http://([^\"]*)");
 Matcher matcher = pattern.matcher(line1+line2);
 while (matcher.find()) {
      System.out.println("list of sites: " + matcher.group(1));
 }

这将出局:

list of sites: madeupwebsite.com
list of sites: madeupwebsite2.com

您可以查看:RegEx: Grabbing values between quotation marks了解更多详情。

答案 1 :(得分:-1)

稍后解析字符串可能会做的是在每个子字符串的末尾添加一个自定义分隔符,当您将其键入为输入时。像这样:

Scanner scan = new Scanner(System.in);
int numOfLines = scan.nextInt(); // Give the number of substrings that you are going to give
String S = "";
while(numOfLines>0)
{
    S = scan.next()+"|"; // '|' is your custom delimiter (That symbol is LOGICAL OR symbol.
    numOfLines--;
}

这将确保子串位于两个' |之间。稍后您可以使用split()函数使用自定义分隔符分割整个字符串。

String[] listString = S.split("|");

这会创建一个子字符串数组,这些子字符串位于2' |'之间。形成的这种子串的总数可以使用.length函数

找到
int n = listString.length;

要检查子字符串是否为URL,您可以下载Apache Commons Validator。只需下载最新版本,将其添加到您的java构建路径中。然后创建一个UrlValidator来验证每个字符串。

UrlValidator url = new UrlValidator();
ArrayList<String> al = new ArrayList<String>();
while(n>0)
{
    String temp = listString[n-1];
    if(url.isValid(temp))
    {
        al.add(temp);
    }
    n--;
}
for(String print : al) //For-Each loop
{
    System.out.println(print);
}

希望这会有所帮助。 :)