【问题标题】:How to do string matches till specific character like @ [closed]如何进行字符串匹配直到特定字符,如@ [关闭]
【发布时间】:2022-01-20 22:13:41
【问题描述】:

我有一个带有文本和 URL (urlsArray) 的字符串数组,例如:

text1@http://url1
text2,text3@http://url2
text3,text4,text5@http://url3

我需要返回@之前的文本包含text3的URL

我正在尝试类似的东西

for (String string : urlsArray){
    if(string.matches("WHAT SHOULD BE HERE TO SEARCH FOR text3 till @")){
        List<String> redirectURL = Arrays.asList(string.substring(string.lastIndexOf("@") + 1));
       System.out.println(redirectURL);
    }
}

所以问题是

if(string.matches("WHAT SHOULD BE HERE TO SEARCH FOR text3 till @")){

预期输出是:

http://url2
http://url3

或字符串匹配之外的任何其他方法

如何在中使用变量而不是 text3

String patternString = ".*text3.*@.*";

【问题讨论】:

  • 您已经使用了string.substring(string.lastIndexOf("@") + 1)。匹配到字符就相当于只使用子串的另一端,所以string.substring(0, string.lastIndexOf("@")).

标签: java


【解决方案1】:

使用 Java 流,您可以像这样拆分、检查和打印:

Stream.of(urlsArray)
    .map(u -> u.split("@"))
    .filter(a -> a[0].contains("text3"))
    .forEach(a -> System.out.println(a[1]));

【讨论】:

    【解决方案2】:

    使用正则表达式检查字符串是否包含 text3

            String patternString = ".*text3.*@.*";
            Pattern pattern = Pattern.compile(patternString);
            Matcher matcher = pattern.matcher(string);
            boolean matches = matcher.matches();
            if (matches) {
              ...
            }
    
    

    如果你还想检查子字符串是否真的是一个你可以使用的 url,你可以使用这个正则表达式

    regex = “((http|https)://)(www.)?” 
    + “[a-zA-Z0-9@:%._\\+~#?&//=]{2,256}\\.[a-z]” 
    + “{2,6}\\b([-a-zA-Z0-9@:%._\\+~#?&//=]*)”
    
    

    【讨论】:

    • 谢谢!它有效,一个问题,如何在 String patternString = ".*text3.*@.*"; 中使用变量而不是 text3
    • @behador1354 你可以参考这个问题:stackoverflow.com/questions/10317603/…
    猜你喜欢
    • 2013-07-08
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 2019-06-05
    • 2020-02-24
    • 2020-04-27
    • 2019-08-01
    • 2020-03-29
    相关资源
    最近更新 更多