我有一个字符串= 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个冒号)。
我可以有一个循环来计算冒号并在第二个冒号之后创建一个字符串,但我想知道是否存在一些更简单的方法来解决它。
答案 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
提取为可重用常量,以避免每次都编译该模式。使用常量还可以在不查看实际代码的情况下更容易地更改模式。