【问题标题】:how to compare string with a dynamic text in java?如何在java中将字符串与动态文本进行比较?
【发布时间】:2017-09-26 05:55:20
【问题描述】:

有一个字符串: “登录1234已创建” 这里 1234 是动态文本。 如何一次性比较整个字符串。

我确实知道使用“”(空格)进行拆分然后进入数组,使用正则表达式断言它的方法:

assertTrue(dynamicText.substring(1, 5).equals([0-9]+));

但这需要更多的代码行。我想知道除此之外是否有任何有效的编码方式。谢谢。

【问题讨论】:

  • 使用输出文本作为程序工作的输入是很奇怪的。你没有在某处包含 1234 的变量吗?
  • 你只是想检查一下字符串中有没有数字序列吗?
  • 我有,但是我把值放在这里是为了说明清楚。
  • @Sweeper 我想检查整个字符串以及动态文本。
  • 如果整个字符串匹配检查动态部分的逻辑是什么。如果您已经有了可变部分,只需在代码中创建预期的字符串并与实际字符串进行比较。

标签: java selenium-webdriver


【解决方案1】:

我找到了解决办法:

String expected = "Login 1234 has been created";
        if(expected.matches("Login ([0-9]+) has been created"))
        {
            System.out.println("matched");
        }

【讨论】:

    【解决方案2】:

    您的输入主要有两个可见的断言:

    1. 在输出中声明静态

      assertTrue(dynamicText.contains("Login") && dynamicText.contains("has been created"));
      
    2. String userInput = "1234"; 
      // if there is a dynamic variable provided as an input this has to be there in your code somewhere
      
      assertTrue(dynamicText.substring(1, 5).equals(userInput));
      

    input必须在那里的原因是,否则您最终会从您找到的WebElements 中读取静态文本。

    简而言之

    String expectedOutput = "Login " + userInput + " has been created.";
    assertTrue("The expected output is different!", dynamicText.equals(expectedOutput));
    

    【讨论】:

    【解决方案3】:

    使用正则表达式:

    if (s.matches("Login \\S+ has been created")) {
        // code here
    }
    

    如果你需要登录名,你不能使用那个方便的方法,而必须直接使用Pattern类:

    Pattern p = Pattern.compile("Login (\\S+) has been created");
    Matcher m = p.matcher(s);
    if (m.matches()) {
        String login = m.group(1);
        // code here
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      • 2010-10-06
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      相关资源
      最近更新 更多