/* * Copyright 1999-2012 Alibaba Group. * * 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 com.alibaba.cobar.parser.util; /** * @author <a href="mailto:shuo.qius@alibaba-inc.com">QIU Shuo</a> */ 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); } }