如何在冒号分隔的字符串中查找最后2项的字符串

时间:2016-10-18 17:59:22

标签: java java-8

我有一个字符串= select * from (select JobNumber, concat(JobNumber, '-', TRIM(LotNumber)) as bomfab from qiw_powerbi) base where bomfab LIKE concat(@job,"-", @fabnumba) 。在这个输入上,我想返回字符串ab:cd:ef:gh(第三个冒号完整) 字符串ef:gh应返回apple:orange:cat:dog(其中包含4个项目和3个冒号)。

我可以有一个循环来计算冒号并在第二个冒号之后创建一个字符串,但我想知道是否存在一些更简单的方法来解决它。

6 个答案:

答案 0 :(得分:3)

您可以对字符串使用split()方法。

>>> "{0:>5}   {1:>6,.2f}".format(10, 1500.657)
'   10   1,500.66'

答案 1 :(得分:1)

String example = "ab:cd:ef:gh";
String[] parts = example.split(":",3); // create at most 3 Array entries
System.out.println(parts[2]);

答案 2 :(得分:0)

split功能可能就是您在这里寻找的功能。使用冒号,就像文档中的分隔符一样。然后,您可以获取最后两个索引,例如数组。

答案 3 :(得分:0)

是的,有更简单的方法 首先,是使用从String类拆分的方法:

 String txt= "ab:cd:ef:gh";
 String[] arr = example.split(":");
 System.out.println(arr[arr.length-2] + " " + arr[arr.length-1]);

,第二个是使用Matcher类。

答案 4 :(得分:0)

使用lastIndexOf()的重载版本,它将起始索引作为第二个参数:

  str.substring(a.lastIndexOf(":", a.lastIndexOf(":") - 1) + 1)

答案 5 :(得分:0)

另一种解决方案是使用Pattern来匹配您的输入,例如[^:]+:[^:]+$。使用模式可能更容易维护,因为您可以轻松地将其更改为处理例如其他分隔符,而无需更改方法的其余部分。

使用模式也可能比String.split()更有效,因为后者也在内部将其参数转换为Pattern,但它比实际需要的更多。

这可能是这样的:

String example = "ab:cd:ef:gh";
Pattern regex = Pattern.compile("[^:]+:[^:]+$");
final Matcher matcher = regex.matcher(example);
if (matcher.find()) {
    // extract the matching group, which is what we are looking for
    System.out.println(matcher.group()); // prints ef:gh
} else {
    // handle invalid input
    System.out.println("no match");
}

请注意,您通常会将regex提取为可重用常量,以避免每次都编译该模式。使用常量还可以在不查看实际代码的情况下更容易地更改模式。