Java 从字符数组中提取正数和负数

Java 从字符数组中提取正数和负数,java,Java,我试图从文件中的字符数组中提取正数和负数。显然,我写的方法只适用于正数。有人能告诉我如何修改这个来处理负数吗? 假设我的字符数组是 {'1'、''2'、'-'、'2'、''3'、'4'} 它应该输出一个包含 {1,2,-2,34} 请提供一些指导。 提前谢谢 我的方法是: private static ArrayList<Integer> extractIntegers(char[] characters) { int beginning = -1; ArrayLi

我试图从文件中的字符数组中提取正数和负数。显然,我写的方法只适用于正数。有人能告诉我如何修改这个来处理负数吗? 假设我的字符数组是

{'1'、''2'、'-'、'2'、''3'、'4'}

它应该输出一个包含

{1,2,-2,34}

请提供一些指导。 提前谢谢

我的方法是:

private static ArrayList<Integer> extractIntegers(char[] characters) 
{
    int beginning = -1;
    ArrayList<Integer> numbers = new ArrayList<Integer>();
        for (int i = 0; i < characters.length; i++)
            {
                boolean isNumber = Character.isDigit(characters[i]);
                    if (beginning != -1 && !isNumber) {
                        numbers.add(parseIntegers(characters, beginning, i));
                        beginning = -1;
                    } else if (beginning == -1 && isNumber) {
                        beginning = i;
                    }
            }
                    if (beginning != -1) {
                        numbers.add(parseIntegers(characters, beginning, characters.length));
                    }
    return numbers;
  }

/*Parses characters to Integers*/
private static int parseIntegers(char[] characters, int begin, int end) {
    return Integer.parseInt(new String(characters, begin, end - begin));
  }

尝试以下功能:

private static ArrayList<Integer> extractIntegers(char[] characters) {
    ArrayList<Integer> numbers = new ArrayList<Integer>();
    char lastValue = 49;//let it be int 1
    for (int i = 0; i < characters.length; i++) {
        if (characters[i] == ' ') {
            continue;
        }
        boolean isNumber = Character.isDigit(characters[i]);//is really a digit?
        boolean isSign = (lastValue == '-');//is last char value that we read really a '-'
        if (isNumber) {
            if (!isSign)
                numbers.add(((int) characters[i] - 48));
            else
                numbers.add((int) -1 * ((int) characters[i] - 48));//if last token was "-" multiply by -1
        }
        lastValue = characters[i];
    }
    return numbers;
}
e、 g

char[]chars={'1','2','-','5'}; ->1 2-5

char[]chars={'1','2','-'}; ->例外情况

char[]chars={'1','2','-','-','6'}; ->例外情况

char[]chars={'1','2','1','a','6'};
->异常

当有更多字符时{read char。如果char是一个数字:将其转换为整数并存储。否则如果char是-并且有下一个字符,则将下一个字符转换为整数并存储为负值。}@jhamon:谢谢!但是你能指导我如何修改我现有的代码来做到这一点吗?你的问题不清楚,因为你不能给我们一个准确的输入示例。一旦你说它是一个数字和符号的数组,newt它是由空格分隔的,现在每个部分都在不同的行上,由\n字符分隔。你的变量名很混乱。最后一个值为符号时,isSign为flase。如果LastValues既不是数字也不是-?您应该将Character.isDigitlastValue替换为lastvalue='-',并反转您的条件。此代码返回的输出值比为您的输入尝试的输入值多,并且返回的结果很好。你能粘贴你试过的输入吗?它实际上都在一个新行上,像这样:1-3 1 3对不起,在这里,我不能让它在新行上打印,但我所有的输入都在一个新行上,像:1\n-3\n1\n3等。你的方法有道理。但它正在抛出异常并到达损坏的字符数组点如果字符[i]是列表中的最后一个字符,它将抛出异常。同样的问题如果a-跟在另一个后面-谢谢,你能解释一下吗?谢谢@jhamon我已经修改了。它将工作输入文件包含有效的数字。如果包含“-”、“-”、“4”,则它将不起作用。您将如何处理这样的输入?{“”、'1'、'2'、'-'、'2'}的空格是?@Shehlina,它已经处理了。它只会省略其他不带“-”甚至“+”的字符
Replace for loop in your code and try with this:

         for (int i = 0; i < characters.length; i++) {
                boolean isNumber = Character.isDigit(characters[i]);
                if(!isNumber) {
                     if(characters[i]=='-') {
                         i++; // to read next digit
                         if(i<characters.length &&  Character.isDigit(characters[i])) {
                         numbers.add(Integer.parseInt((String.valueOf(characters[i])))*-1);
                     }
                     }                   
                }
                else {
                    numbers.add(Integer.parseInt((String.valueOf(characters[i]))));
                }
            }
    private List<Integer> extractIntegers(char[] characters) throws Exception 
    {
        List<Integer> numbers = new ArrayList<Integer>();
        for (int i = 0; i < characters.length; i++)
        {
            boolean isNumber = Character.isDigit(characters[i]);
            if (isNumber) {
                numbers.add(Character.getNumericValue(characters[i]));
            } else if (characters[i] == '-' && i+1 < characters.length && Character.isDigit(characters[i+1])) {
                i++;
                numbers.add(Character.getNumericValue(characters[i]) * -1);
            } else {
                throw new Exception("Corrupted char array");
            }
        }
        return numbers;
     }