Fixed negative number bug in exp4j and custom expressions.

This commit is contained in:
Richard Graham 2012-08-17 06:21:37 +00:00
parent ceeade06b4
commit 22a81bc9be
2 changed files with 8 additions and 6 deletions

View File

@ -166,6 +166,7 @@ class Tokenizer {
Token lastToken;
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
if (c == ' ')
continue;
if (isDigit(c)) {
@ -179,12 +180,12 @@ class Tokenizer {
}
i += numberLen - 1;
lastToken = new NumberToken(valueBuilder.toString());
} else if (Character.isLetter(c) || c == '_' || c == '#') {
} else if (Character.isLetter(c) || c == '_' || c == '$') {
// can be a variable or function
final StringBuilder nameBuilder = new StringBuilder();
nameBuilder.append(c);
int offset = 1;
while (chars.length > i + offset && (Character.isLetter(chars[i + offset]) || Character.isDigit(chars[i + offset]) || chars[i + offset] == '_' || chars[i + offset] == '#')) {
while (chars.length > i + offset && (Character.isLetter(chars[i + offset]) || Character.isDigit(chars[i + offset]) || chars[i + offset] == '_' || chars[i + offset] == '$')) {
nameBuilder.append(chars[i + offset++]);
}
String name = nameBuilder.toString();

View File

@ -204,7 +204,7 @@ public class CustomExpression implements Cloneable{
return false;
// No bad characters
for (char c : "0123456789.,()[]{}<>:#@%^&* ".toCharArray())
for (char c : "0123456789.,()[]{}<>:#@%^&*$ ".toCharArray())
if (symbol.indexOf(c) != -1 )
return false;
@ -230,7 +230,7 @@ public class CustomExpression implements Cloneable{
return false;
// No characters that could mess things up saving etc
for (char c : ",()[]{}<>#".toCharArray())
for (char c : ",()[]{}<>#$".toCharArray())
if (name.indexOf(c) != -1 )
return false;
@ -293,6 +293,7 @@ public class CustomExpression implements Cloneable{
}
else break;
case '#' : return false;
case '$' : return false;
case '=' : return false;
}
}
@ -465,12 +466,12 @@ public class CustomExpression implements Cloneable{
}
/*
* Returns a simple all upper case string hash code with a proceeding # mark.
* Returns a simple all upper case string hash code with a proceeding $ mark.
* Used for temporary substitution when evaluating index and range expressions.
*/
public String hash(){
Integer hashint = new Integer(this.getExpressionString().hashCode());
String hash = "#";
String hash = "$";
for (char c : hashint.toString().toCharArray()){
char newc = (char) (c + 17);
hash = hash + newc;