Java examples for java.lang:String Split
Splits a String by Character type as returned by java.lang.Character.getType(char).
/*//from w w w . j av a 2 s . co m * Copyright 2013 Guidewire Software, Inc. */ /** * This class is based, in part, on org.apache.commons.lang.StringUtils and is intended * to break the dependency on that project. * * @author <a href="http://jakarta.apache.org/turbine/">Apache Jakarta Turbine</a> * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a> * @author Daniel L. Rall * @author <a href="mailto:gcoladonato@yahoo.com">Greg Coladonato</a> * @author <a href="mailto:ed@apache.org">Ed Korthof</a> * @author <a href="mailto:rand_mcneely@yahoo.com">Rand McNeely</a> * @author Stephen Colebourne * @author <a href="mailto:fredrik@westermarck.com">Fredrik Westermarck</a> * @author Holger Krauth * @author <a href="mailto:alex@purpletech.com">Alexander Day Chaffee</a> * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a> * @author Arun Mammen Thomas * @author Gary Gregory * @author Phil Steitz * @author Al Chou * @author Michael Davey * @author Reuben Sivan * @author Chris Hyzer * Johnson */ //package com.java2s; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] argv) { String str = "java2s.com"; System.out.println(java.util.Arrays .toString(splitByCharacterTypeCamelCase(str))); } private static final String[] EMPTY_STRING_ARRAY = new String[0]; /** * <p>Splits a String by Character type as returned by * <code>java.lang.Character.getType(char)</code>. Groups of contiguous * characters of the same type are returned as complete tokens, with the * following exception: the character of type * <code>Character.UPPERCASE_LETTER</code>, if any, immediately * preceding a token of type <code>Character.LOWERCASE_LETTER</code> * will belong to the following token rather than to the preceding, if any, * <code>Character.UPPERCASE_LETTER</code> token. * <pre> * splitByCharacterTypeCamelCase(null) = null * splitByCharacterTypeCamelCase("") = [] * splitByCharacterTypeCamelCase("ab de fg") = ["ab", " ", "de", " ", "fg"] * splitByCharacterTypeCamelCase("ab de fg") = ["ab", " ", "de", " ", "fg"] * splitByCharacterTypeCamelCase("ab:cd:ef") = ["ab", ":", "cd", ":", "ef"] * splitByCharacterTypeCamelCase("number5") = ["number", "5"] * splitByCharacterTypeCamelCase("fooBar") = ["foo", "Bar"] * splitByCharacterTypeCamelCase("foo200Bar") = ["foo", "200", "Bar"] * splitByCharacterTypeCamelCase("ASFRules") = ["ASF", "Rules"] * </pre> * @param str the String to split, may be <code>null</code> * @return an array of parsed Strings, <code>null</code> if null String input * @since 2.4 */ public static String[] splitByCharacterTypeCamelCase(String str) { return splitByCharacterType(str, true); } /** * <p>Splits a String by Character type as returned by * <code>java.lang.Character.getType(char)</code>. Groups of contiguous * characters of the same type are returned as complete tokens. * <pre> * splitByCharacterType(null) = null * splitByCharacterType("") = [] * splitByCharacterType("ab de fg") = ["ab", " ", "de", " ", "fg"] * splitByCharacterType("ab de fg") = ["ab", " ", "de", " ", "fg"] * splitByCharacterType("ab:cd:ef") = ["ab", ":", "cd", ":", "ef"] * splitByCharacterType("number5") = ["number", "5"] * splitByCharacterType("fooBar") = ["foo", "B", "ar"] * splitByCharacterType("foo200Bar") = ["foo", "200", "B", "ar"] * splitByCharacterType("ASFRules") = ["ASFR", "ules"] * </pre> * @param str the String to split, may be <code>null</code> * @return an array of parsed Strings, <code>null</code> if null String input * @since 2.4 */ public static String[] splitByCharacterType(String str) { return splitByCharacterType(str, false); } /** * <p>Splits a String by Character type as returned by * <code>java.lang.Character.getType(char)</code>. Groups of contiguous * characters of the same type are returned as complete tokens, with the * following exception: if <code>camelCase</code> is <code>true</code>, * the character of type <code>Character.UPPERCASE_LETTER</code>, if any, * immediately preceding a token of type <code>Character.LOWERCASE_LETTER</code> * will belong to the following token rather than to the preceding, if any, * <code>Character.UPPERCASE_LETTER</code> token. * @param str the String to split, may be <code>null</code> * @param camelCase whether to use so-called "camel-case" for letter types * @return an array of parsed Strings, <code>null</code> if null String input * @since 2.4 */ private static String[] splitByCharacterType(String str, boolean camelCase) { if (str == null) { return null; } if (str.length() == 0) { return EMPTY_STRING_ARRAY; } char[] c = str.toCharArray(); List list = new ArrayList(); int tokenStart = 0; int currentType = Character.getType(c[tokenStart]); for (int pos = tokenStart + 1; pos < c.length; pos++) { int type = Character.getType(c[pos]); if (type == currentType) { continue; } if (camelCase && type == Character.LOWERCASE_LETTER && currentType == Character.UPPERCASE_LETTER) { int newTokenStart = pos - 1; if (newTokenStart != tokenStart) { list.add(new String(c, tokenStart, newTokenStart - tokenStart)); tokenStart = newTokenStart; } } else { list.add(new String(c, tokenStart, pos - tokenStart)); tokenStart = pos; } currentType = type; } list.add(new String(c, tokenStart, c.length - tokenStart)); return (String[]) list.toArray(new String[list.size()]); } /** * Gets a String's length or <code>0</code> if the String is <code>null</code>. * * @param str * a String or <code>null</code> * @return String length or <code>0</code> if the String is <code>null</code>. * @since 2.4 */ public static int length(String str) { return str == null ? 0 : str.length(); } }