Java计算字符串中数字,特殊字符和字母的更改次数

时间:2019-05-22 11:14:56

标签: java string count

我想计算字符串中数字,特殊字符和字母的更改次数,例如:

`215348-jobpoint` 

包含从“ 8”到特殊字符“-”到字母“ j”的3种变化。 因此,基本上,我尝试遍历char数组,并检查该数组中的实际和下一个char,如果实际和下一个char属于同一Type实例。例如,如果它们具有相同类型的字母(字母)或相同的实例号,或相同类型的特殊字符,该怎么办?

2 个答案:

答案 0 :(得分:1)

希望这会有所帮助 取大小为3的String数组,将所有特殊字符保留在一个位置,将所有数字合为一,将字母组合为一 例如arr = {“ 01 ... 9”,“!.... @”,“ a .... z”} 现在检查每个字符是否包含在arr中的不同位置,然后增加计数。 您可以保存前一个字符的位置。

if(!arr[previousKey].contains(character))
{
    count++;
    change previousKey to position which contain the character
}
else
    continue;

答案 1 :(得分:1)

尽管您可以使用循环来完成此操作,并在每次更改类型时进行检查,但增加一个计数器,但我个人还是在此使用带有正则表达式的String#replaceAll

例如:

String str = "215348-jobpoint";
System.out.println("Input: \"" + str + "\"");

// Replace chunks of digits with a single '0':
str = str.replaceAll("\\d+", "0");
System.out.println("After replacing digit chunks: \"" + str + "\"");

// Replace chunks of letters with a single 'A':
str = str.replaceAll("[A-Za-z]+", "A");
System.out.println("After replacing letter chunks: \"" + str + "\"");

// Replace chunks of non-digits and non-letters with a single '~':
str = str.replaceAll("[^A-Za-z\\d]+", "~");
System.out.println("After replacing non-digit/non-letter chunks: \"" + str + "\"");

// Since we transformed every chunk of subsequent characters of the same type to a single character,
// retrieving the length-1 will get our amount of type-changes
int amountOfTypeChunks = str.length();
int amountOfTypeChanges = amountOfTypeChunks -1;
System.out.println("Result (amount of chunks of different types): " + amountOfTypeChunks);
System.out.println("Result (amount of type changes): " + amountOfTypeChanges);

结果:

Input: "215348-jobpoint"
After replacing digit chunks: "0-jobpoint"
After replacing letter chunks: "0-A"
After replacing non-digit/non-letter chunks: "0~A"
Result (amount of chunks of different types): 3
Result (amount of type changes): 2

Try it online.

请注意,示例输入"215348-jobpoint"具有两种类型更改:从215348-,以及从-jobpoint,而不是三个说。如果您不确定要查找输出3,而是要查找类型块的数量而不是类型更改的数量,则可以在-1之后删除str.length()(其中例如"abc"这样的输入将导致1而不是0)。我已经在上面的代码中添加了两个结果。

此外,我使用的0A~可以是任何其他字符。由于我们只想知道替换后结果String的长度,所以它与哪个字符无关(尽管当然不要用字母代替数字)。