00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 package com.realtime.crossfire.jxclient.util;
00023
00024 import java.util.ArrayList;
00025 import java.util.List;
00026 import java.util.regex.Pattern;
00027 import org.jetbrains.annotations.NotNull;
00028
00033 public class StringUtils {
00034
00038 @NotNull
00039 private static final Pattern PATTERN_LEADING_WHITESPACE = Pattern.compile("^[ \t]+");
00040
00044 private StringUtils() {
00045 }
00046
00052 @NotNull
00053 public static String trimLeading(@NotNull final CharSequence str) {
00054 return PATTERN_LEADING_WHITESPACE.matcher(str).replaceAll("");
00055 }
00056
00063 @NotNull
00064 public static String[] splitFields(@NotNull final String line) throws UnterminatedTokenException {
00065 final List<String> tokens = new ArrayList<String>(64);
00066
00067 final char[] chars = line.toCharArray();
00068
00069 int i = 0;
00070 while (i < chars.length) {
00071 while (i < chars.length && (chars[i] == ' ' || chars[i] == '\t')) {
00072 i++;
00073 }
00074 final int start;
00075 final int end;
00076 if (i < chars.length && (chars[i] == '"' || chars[i] == '\'')) {
00077
00078 final char quoteChar = chars[i++];
00079 start = i;
00080 while (i < chars.length && chars[i] != quoteChar) {
00081 i++;
00082 }
00083 if (i >= chars.length) {
00084 throw new UnterminatedTokenException(line.substring(start-1));
00085 }
00086 end = i;
00087 i++;
00088 } else {
00089
00090 start = i;
00091 while (i < chars.length && chars[i] != ' ' && chars[i] != '\t') {
00092 i++;
00093 }
00094 end = i;
00095 }
00096 tokens.add(line.substring(start, end));
00097 }
00098
00099 return tokens.toArray(new String[tokens.size()]);
00100 }
00101
00102 }