JsonPath仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

158 lines
2.9 KiB

12 years ago
package com.jayway.jsonpath.internal;
public class Parser {
public enum Token {
DOT('.'),
OPEN_BRACKET('['),
CLOSE_BRACKET(']'),
OPEN_PARENTHESIS('('),
CLOSE_PARENTHESIS(')'),
BLANK(' '),
TICK('\''),
END('^');
private final char c;
Token(char c) {
this.c = c;
}
}
protected String buffer;
private int i;
public Parser(String src) {
buffer = src;
i = -1;
}
public char prev(){
return buffer.charAt(i-1);
}
public boolean prevIs(char c){
if(i <= 0){
return false;
}
return prev() == c;
}
public char curr(){
return buffer.charAt(i);
}
public char peek(){
return buffer.charAt(i + 1);
}
public boolean peekIs(Token token){
return buffer.charAt(i+1) == token.c;
}
public char next(){
return buffer.charAt(++i);
}
public boolean hasNext(){
return i < buffer.length() - 1;
}
public String next(int count){
//i++;
int y = i;
i = i + count - 1;
return buffer.substring(y, i+1);
//return Arrays.copyOfRange(buffer, y, i+1);
}
public void trim(Token token){
while (peekIs(token)){
next();
}
}
public int findOffset(Token... tokens){
int y = i;
char check;
do {
if(y == buffer.length()-1 && contains(tokens, Token.END.c)){
y++;
break;
}
check = buffer.charAt(++y);
} while (!contains(tokens, check));
return y-i;
}
public String nextUntil(Token... tokens){
next();
int offset = findOffset(tokens);
return next(offset);
}
public boolean isInts(String chars, boolean allowSequence){
for (int i = 0; i < chars.length(); i++){
char c = chars.charAt(i);
boolean isSequenceChar = (c == ' ' || c == ',');
if(!Character.isDigit(c) || (isSequenceChar && allowSequence)){
return false;
}
}
return true;
}
private boolean contains(Token[] arr, char checkFor){
for (int i = 0; i < arr.length; i++){
if(arr[i].c == checkFor){
return true;
}
}
return false;
}
/*
public Filter2 parse(String filterString){
char[] chars = filterString.trim().toCharArray();
int i = 0;
do {
char current = chars[i];
switch (current){
case '?':
break;
case '(':
break;
case ')':
break;
case '\'';
}
i++;
} while (i < chars.length);
}
*/
}