分裂字符串的小问题

时间:2012-09-05 08:20:08

标签: java string split

我有这个字符串:

"http://my/website/collections/index.php?s=1&schema=http:/my/web/fe7cd50991b11f51050902sddaf3e042bd5467/idApp=19"

我想从字符串中提取此标记:fe7cd50991b11f51050902sddaf3e042bd5467

网站可能会有所不同,但唯一的想法是不能改变的是我必须获得的字符串标记始终位于“/ idApp =”的左侧

哪种解决方法最有效?

感谢。

6 个答案:

答案 0 :(得分:3)

String url = "http://my/website/collections/index.php?s=1&schema=http:/my/web/fe7cd50991b11f51050902sddaf3e042bd5467/idApp=19";
String[] tokens = url.split("/");
String searched = tokens[array.length - 2];

如果令牌是每次prelast时,这将有效。否则,您需要浏览Array并检查当前令牌是否符合您的条件并在之前获取令牌。 在代码中:

int tokenId = 0;
for (int i = 0; i < tokens.length; i++) {
  if (token[i].equals("/idApp=")) {
    tokenId = i - 1;
    break;
  }
}
String rightToken = tokens[tokenId];

答案 1 :(得分:2)

假设令牌只能是数字和字母,你可以使用这样的东西。

它匹配/ idApp = string之前的一系列数字和字母。

作为一种标准的,易于阅读的方式,它是“高效的”,但可能有更高性能的方法来做到这一点,尽管你应该仔细考虑是否真的找到这个字符串是一个表演瓶颈。

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


public class TestRegexp {
    public static void main(String args[]) {
        String text = "http://my/website/collections/index.php?s=1&schema=http:/my/web/fe7cd50991b11f51050902sddaf3e042bd5467/idApp=19";
        Pattern pattern = Pattern.compile("(\\w+)/idApp=");
        Matcher m = pattern.matcher(text);
        if (m.find()) {
            System.out.println(m.group(1)); 
        }

    }
}

答案 2 :(得分:1)

这里你不需要正则表达式。绝对。任务只是削减一根绳子,不要过于复杂。简单是关键。

int appIdPosition = url.lastIndexOf("/idApp=");
int slashBeforePosition = url.lastIndexOf("/", appIdPosition - 1);
String token = url.substring(slashBeforePosition + 1, appIdPosition);

答案 3 :(得分:0)

你可以使用正则表达式

这两个包将帮助您

  • java.util.regex.Matcher
  • java.util.regex.Pattern

答案 4 :(得分:0)

简单2次拆分适用于多个参数。首先分为"idApp",然后分配在/

即使idApp参数后面有多个参数,以下代码也能正常工作。

String url = "http://my/website/collections/index.php?s=1&schema=http:/my/web/fe7cd50991b11f51050902sddaf3e042bd5467/idApp=19";
String[] tokens = url.split("idApp");
String[] leftPartTokens = tokens[0].split("/");
String searched = leftPartTokens[leftPartTokens.length - 1];
System.out.println(searched);

答案 5 :(得分:0)

使用字符串执行任何操作时,请始终注意:

http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/StringUtils.html

这是我的回答......

public static void main(String[] args) {
    //Don't forget: import static org.apache.commons.lang.StringUtils.*;
    String url2 = "http://my/website/collections/index.php?s=1&schema=http:/my/web/fe7cd50991b11f51050902sddaf3e042bd5467/idApp=19";
    String result =  substringAfterLast("/", substringBeforeLast(url2,"/")) ;
    System.out.println(result);
}