Fixed negative number bug in exp4j and custom expressions.
This commit is contained in:
parent
ceeade06b4
commit
22a81bc9be
@ -166,6 +166,7 @@ class Tokenizer {
|
|||||||
Token lastToken;
|
Token lastToken;
|
||||||
for (int i = 0; i < chars.length; i++) {
|
for (int i = 0; i < chars.length; i++) {
|
||||||
char c = chars[i];
|
char c = chars[i];
|
||||||
|
|
||||||
if (c == ' ')
|
if (c == ' ')
|
||||||
continue;
|
continue;
|
||||||
if (isDigit(c)) {
|
if (isDigit(c)) {
|
||||||
@ -179,12 +180,12 @@ class Tokenizer {
|
|||||||
}
|
}
|
||||||
i += numberLen - 1;
|
i += numberLen - 1;
|
||||||
lastToken = new NumberToken(valueBuilder.toString());
|
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
|
// can be a variable or function
|
||||||
final StringBuilder nameBuilder = new StringBuilder();
|
final StringBuilder nameBuilder = new StringBuilder();
|
||||||
nameBuilder.append(c);
|
nameBuilder.append(c);
|
||||||
int offset = 1;
|
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++]);
|
nameBuilder.append(chars[i + offset++]);
|
||||||
}
|
}
|
||||||
String name = nameBuilder.toString();
|
String name = nameBuilder.toString();
|
||||||
|
@ -204,7 +204,7 @@ public class CustomExpression implements Cloneable{
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
// No bad characters
|
// No bad characters
|
||||||
for (char c : "0123456789.,()[]{}<>:#@%^&* ".toCharArray())
|
for (char c : "0123456789.,()[]{}<>:#@%^&*$ ".toCharArray())
|
||||||
if (symbol.indexOf(c) != -1 )
|
if (symbol.indexOf(c) != -1 )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -230,7 +230,7 @@ public class CustomExpression implements Cloneable{
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
// No characters that could mess things up saving etc
|
// No characters that could mess things up saving etc
|
||||||
for (char c : ",()[]{}<>#".toCharArray())
|
for (char c : ",()[]{}<>#$".toCharArray())
|
||||||
if (name.indexOf(c) != -1 )
|
if (name.indexOf(c) != -1 )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -293,6 +293,7 @@ public class CustomExpression implements Cloneable{
|
|||||||
}
|
}
|
||||||
else break;
|
else break;
|
||||||
case '#' : return false;
|
case '#' : return false;
|
||||||
|
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.
|
* Used for temporary substitution when evaluating index and range expressions.
|
||||||
*/
|
*/
|
||||||
public String hash(){
|
public String hash(){
|
||||||
Integer hashint = new Integer(this.getExpressionString().hashCode());
|
Integer hashint = new Integer(this.getExpressionString().hashCode());
|
||||||
String hash = "#";
|
String hash = "$";
|
||||||
for (char c : hashint.toString().toCharArray()){
|
for (char c : hashint.toString().toCharArray()){
|
||||||
char newc = (char) (c + 17);
|
char newc = (char) (c + 17);
|
||||||
hash = hash + newc;
|
hash = hash + newc;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user