识别字符串

时间:2016-09-09 18:11:04

标签: java

我是Java的新手,试图了解更多信息。

如何识别字符串中连续的整数集?

例如,如果我有字符串“123hh h3ll0 wor1d”,程序应输出4作为答案。

这是我的工作,因此,我的程序输出6.我理解为什么,但我不知道如何实现我想要的程序。

public static void main (String[] args) throws java.lang.Exception
    {
        String string = "123hh h3ll0 w0rld";

        int count = 0;

        if (string.isEmpty())
            count  = 0;

        for (int i = 0; i < string.length(); i++)
        {
            char c = string.charAt(i);

            if (Character.isDigit(c))
                count++;   
        }

        System.out.println(count);

    }

6 个答案:

答案 0 :(得分:0)

您的程序会计算输入字符串中每次出现的数字;并且有6位数字; 6是你的结果。所以没有惊喜。你必须明白:如果你对数字序列感兴趣,那么只需检查每个字符&#34;你是一个数字&#34;还不够!

如果您对最长序列的长度感兴趣,那么您的&#34;计数&#34;必须加强:

  1. 在序列中,你不断增加&#34; currentSequenceLength&#34;计数器
  2. 当击中非数字时,你停止计数;然后将最后一个序列的长度与&#34;最大值&#34;进行比较。你也必须记住。
  3. 这应该足以让你前进;可以肯定的;这个想法不是我们为你做的功课/学习部分。

答案 1 :(得分:0)

您的计划是一个良好的开端,但它会计算所有数字。当您处于连续的数字组时,您需要避免count++。您可以通过添加boolean标记来实现此目的,当您看到一个数字时,将其设置为true,然后当您看到非数字时添加到false

boolean inDigits = false;
for (int i = 0; i < string.length(); i++)
{
    char c = string.charAt(i);

    if (Character.isDigit(c)) {
        if (!inDigits) count++;
        inDigits = true;
    } else {
        inDigits = false;
    }
}

Demo 1

查找组数的更简单方法是在\\d+(一个或多个数字的序列)上拆分,计算得到的组数,然后减去一个:

System.out.println(string.split("\\d+").length-1);

Demo 2

答案 2 :(得分:0)

根据您所说的连续内容,您希望每次不在数字上时重置计数并存储在此过程中达到的最大数量。

添加int currentMaximum = 0,当读入非数字时,请检查count是否大于currentMaximum并将currentMaximum设置为count,然后设置count = 0。这将导致计数在每个非数字处重置,并且仅在数字连续时才计数。

答案 3 :(得分:0)

所以你的代码片段只是计算字符串中的每个数字,你说你知道。所以你必须看看它实际上想要计算的情况。对于连续的数字,您要查找的情况是当前字符是数字,而下一个数字不是。那是连续数字链被打破的时候。我已经编辑了你的for循环以使用这种技术来查找连续数字集的数量:

public static void main (String[] args) throws java.lang.Exception {

        String string = "123hh h3ll0 w0rld";
        int count = 0;

        if (string.isEmpty()) {

            count  = 0;
        } else {

            for (int i = 0; i < string.length() - 1; i++){

                char current = string.charAt(i);
                char next = string.charAt(i+1);
                if (Character.isDigit(current) && !Character.isDigit(next)){

                    count++;
                }
            }

            System.out.println(count);
        }
    }

答案 4 :(得分:0)

我会通过预处理或实时定位字符串中的数字,您的问题陈述没有定义任何一个的要求,然后参考相关问题:here并另外{{3} }(它也提供了c ++和java样本)。

没有太多要详细阐述,因为您没有设置问题空间来定义其他因素(OP的更深入的问题陈述将有助于答案反映更准确的答案)。尝试指定以下内容:

  • 遇到非数字时会重置吗?

  • 你能使用像集这样的对象吗?

  • 您是在阅读简单的测试字符串还是大量数据?

如果没有更多信息,我认为这里的答案会有不同的答案。 干杯

答案 5 :(得分:0)

此代码将生成count = 6和group = 4.

enter     public static void main (String[] args) throws java.lang.Exception
{
    String string = "123hh h3ll0 w0rld";
    boolean isGroup = false;

    int count = 0;
    int group = 0;

    if (string.isEmpty()) {
        count  = 0;
    } else {
        for (int i = 0; i < string.length(); i++) {
            char c = string.charAt(i);

            if (Character.isDigit(c)) {
                count++;
                if (!isGroup) {
                    group++;
                    isGroup = true;
                }
            } else {
                isGroup = false;
            }

        }
    }

    System.out.println(count);
    System.out.println(group);

}