Java 字符串函数如何计算字符串行中的分隔符
我有一行字符串,如下所示: A:B:C:D:E:F:G:H:I:J:K:L:M 这意味着分隔符(:)计数是12。这行是有效的 现在假设您有一行: A:B:C:D:E:F:G:H: 此行也有效,因为它包含12个分隔符。其中8个值存在,4个值为空 现在,以下行应该无效: A:B:C:D:E:F:--无效-因为它只包含6个值,但预期值为12 如何做到这一点?我尝试了以下代码,但没有得到所需的输出:Java 字符串函数如何计算字符串行中的分隔符,java,string,Java,String,我有一行字符串,如下所示: A:B:C:D:E:F:G:H:I:J:K:L:M 这意味着分隔符(:)计数是12。这行是有效的 现在假设您有一行: A:B:C:D:E:F:G:H: 此行也有效,因为它包含12个分隔符。其中8个值存在,4个值为空 现在,以下行应该无效: A:B:C:D:E:F:--无效-因为它只包含6个值,但预期值为12 如何做到这一点?我尝试了以下代码,但没有得到所需的输出: String strLine = "A:B:C:D:E:F:G:H:::::" ; int delimi
String strLine = "A:B:C:D:E:F:G:H:::::" ;
int delimiterCount = 12 ;
String[] ValuesArray = strLine.split(":");
if(ValuesArray.length != delimiterCounter){
System.out.println(Invalid);
}else {
System.out.println("ValidLine");
}
我得到的输出在应该有效的地方是无效的。应该有效
String strLine = "A:B:C:D:E:F:G:H: : : : : " ;
int delimiterCount = 12 ;
String[] ValuesArray = strLine.split(":");
if((ValuesArray.length - 1) != delimiterCounter){
System.out.println(Invalid);
}else {
System.out.println("ValidLine");
}
由于数组的值不是delimeter的值,请使用以下方法计算特定
字符串
public static int countOccurance(String inputString, String key) {
int index = 0;
int fromIndex = 0;
int result = 0;
if (inputString == null || key == null) {
return 0;
}
while ((index = inputString.indexOf(key, fromIndex)) != -1) {
result++;
fromIndex = index + key.length();
}
return result;
}
没有理由在这里使用正则表达式。如果检查输入有效性的唯一标准是12个delimeters
:
,只需计算它们
String strLine = "A:B:C:D:E:F:G:H:::::";
int EXPECTED_DELIMETERS = 12;
int delimiterCount = 0;
for (int idx = 0; idx < strLine.length(); idx++) {
if (strLine.charAt(idx) == ':') {
delimiterCount++;
}
}
if (EXPECTED_DELIMETERS == delimiterCount) {
System.out.println("ValidLine");
} else {
System.out.println("Invalid");
}
String strLine=“A:B:C:D:E:F:G:H:;
int预期的_DELIMETERS=12;
int delimiterCount=0;
for(int idx=0;idx
如果您想使用拆分
,而且这确实是一种不错的方法(尽管它可能适用于这种特殊情况),您需要将-1作为第二个参数传递给拆分
,否则它会删除空字符串
看
很高兴了解有关split
的信息。有些语言需要-1,有些则不需要
代码
class Main {
public static void main(String[] args) {
String line = "A:B:C:D:E:F:G:H:::::" ;
int delimiterCount = 12 ;
String[] values = line.split(":", -1);
if (values.length != delimiterCount + 1) {
System.out.println("Invalid Line");
} else {
System.out.println("Valid Line");
}
}
}
简明Java 8解决方案:
private static boolean isValid(String content, char delimiter, int count) {
return count == content.chars().filter(c -> c == delimiter).count();
}
进行字符串替换,并将所有的
:
更改为空字符串-然后比较字符串长度-如果新字符串比原始字符串小12个字符,您就有了12个分隔符。@MarcB这在性能方面是如何叠加的?与计数出现次数相比,字符串替换是否会导致不必要的开销?取决于分隔符之间的数据量。对于较短的字符串,替换将更重,对于较长的字符串…可能需要进行基准测试。应将“fromIndex=index+1;”更改为“fromIndex=index+key.length;”,因为键字符串的长度可能大于1。(这只是在这种情况下才精确。)这将改善步长,因此性能几乎没有,逻辑上我认为这不会影响功能