/* * Copyright (c) 2013, OpenCloudDB/MyCAT and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software;Designed and Developed mainly by many Chinese * opensource volunteers. you can redistribute it and/or modify it under the * terms of the GNU General Public License version 2 only, as published by the * Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Any questions about this component can be directed to it's project Web address * https://code.google.com/p/opencloudb/. * */ 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); } }