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