从起点仅提取字符串中的数字

问题描述

假设我从一个解码了霍夫曼文本和其中字符频率的文件中取出一个字符串。例如,取出的字符串是:"000111010 h:2#c:1" 我只想取 2 和 1 并将它们放入称为频率的整数数组列表中。 这是我为它编写的方法,但它似乎不起作用:

public void extractFrequency() {
     char[] stringArray= new char[finalText.length()];
     stringArray=finalText.tochararray();
     boolean startingNow=false;
     
     for (int i = 0; i < stringArray.length; i=+3) {
        
        if(stringArray[i]==' ')
            startingNow=true;
        
        if(startingNow=true) {
            frequencies.add((int)stringArray[i]);
            i++;
        }
        }
    System.out.println(frequencies);
}


你能帮我吗?

解决方法

在检查 startingNow 是否为真的同时,检查当前字符是否为数字。如果是数字,则将其添加到列表中。但我不明白你为什么在循环中做 i+=3。这可能对你有用。我在将它添加到列表时减去 48,以获得原始数字,如字符系统中的“0”从 48 开始。

public void extractFrequency() {
     char[] stringArray= new char[finalText.length()];
     stringArray=finalText.toCharArray();
     boolean startingNow=false;
     
     for (int i = 0; i < stringArray.length; i++) {
        
        if(stringArray[i]==' ')
            startingNow=true;
        
        if(startingNow==true && Character.isDigit(stringArray[i])) {//should be startingNow==true not startingNow=true
            frequencies.add(stringArray[i] - 48);
        }
        }
    System.out.println(frequencies);
}
,

它不起作用,因为您的代码中有错误 if(startingNow=true) 应该是 if(startingNow==true)