/*
* Copyright 2012-2015 org.opencloudb.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.opencloudb.parser.util;
/**
* @author mycat
*/
public final class PairUtil {
private static final int DEFAULT_INDEX = -1;
/**
* "2" -> (0,2)<br/>
* "1:2" -> (1,2)<br/>
* "1:" -> (1,0)<br/>
* "-1:" -> (-1,0)<br/>
* ":-1" -> (0,-1)<br/>
* ":" -> (0,0)<br/>
*/
public static Pair<Integer, Integer> sequenceSlicing(String slice) {
int ind = slice.indexOf(':');
if (ind < 0) {
int i = Integer.parseInt(slice.trim());
if (i >= 0) {
return new Pair<Integer, Integer>(0, i);
} else {
return new Pair<Integer, Integer>(i, 0);
}
}
String left = slice.substring(0, ind).trim();
String right = slice.substring(1 + ind).trim();
int start, end;
if (left.length() <= 0) {
start = 0;
} else {
start = Integer.parseInt(left);
}
if (right.length() <= 0) {
end = 0;
} else {
end = Integer.parseInt(right);
}
return new Pair<Integer, Integer>(start, end);
}
/**
* <pre>
* 将名字和索引用进行分割 当src = "offer_group[4]", l='[', r=']'时,
* 返回的Piar<String,Integer>("offer", 4);
* 当src = "offer_group", l='[', r=']'时,
* 返回Pair<String, Integer>("offer",-1);
* </pre>
*/
public static Pair<String, Integer> splitIndex(String src, char l, char r) {
if (src == null) {
return null;
}
int length = src.length();
if (length == 0) {
return new Pair<String, Integer>("", DEFAULT_INDEX);
}
if (src.charAt(length - 1) != r) {
return new Pair<String, Integer>(src, DEFAULT_INDEX);
}
int offset = src.lastIndexOf(l);
if (offset == -1) {
return new Pair<String, Integer>(src, DEFAULT_INDEX);
}
int index = DEFAULT_INDEX;
try {
index = Integer.parseInt(src.substring(offset + 1, length - 1));
} catch (NumberFormatException e) {
return new Pair<String, Integer>(src, DEFAULT_INDEX);
}
return new Pair<String, Integer>(src.substring(0, offset), index);
}
}