28package com.jogamp.common.util;
30import java.util.ArrayList;
36 public static final char LF =
'\n';
38 public static final char CR =
'\r';
40 public static final char SPACE =
' ';
53 String.valueOf(Character.toChars(0x000B))+
54 String.valueOf(Character.toChars(0x000C))+
56 String.valueOf(
SPACE)+
57 String.valueOf(Character.toChars(0x0085))+
58 String.valueOf(Character.toChars(0x00A0))+
59 String.valueOf(Character.toChars(0x1680))+
60 String.valueOf(Character.toChars(0x2000))+
61 String.valueOf(Character.toChars(0x2001))+
62 String.valueOf(Character.toChars(0x2002))+
63 String.valueOf(Character.toChars(0x2003))+
64 String.valueOf(Character.toChars(0x2004))+
65 String.valueOf(Character.toChars(0x2005))+
66 String.valueOf(Character.toChars(0x2006))+
67 String.valueOf(Character.toChars(0x2007))+
68 String.valueOf(Character.toChars(0x2008))+
69 String.valueOf(Character.toChars(0x2009))+
70 String.valueOf(Character.toChars(0x200A))+
71 String.valueOf(Character.toChars(0x202F))+
72 String.valueOf(Character.toChars(0x205F))+
73 String.valueOf(Character.toChars(0x3000));
86 return 0xff01 <= cp && cp <= 0xff60;
93 return 0xff61 == cp && cp <= 0xffee;
106 final int len = s.length();
111 for (
int i=0; len > i; ) {
131 public static int indexOf(
final String hay,
final int needle,
final int start) {
133 return hay.indexOf(needle, start);
150 public static int indexOf(
final CharSequence hay,
final int needle,
final int start) {
152 if (hay instanceof String) {
153 return ((String) hay).indexOf(needle, start);
155 final int l = hay.length();
156 final int s = Math.max(0, start);
158 if (needle < Character.MIN_SUPPLEMENTARY_CODE_POINT) {
159 for (
int i = s; i < l; i++) {
160 if (hay.charAt(i) == needle) {
164 }
else if (Character.isValidCodePoint(needle)) {
165 final char[] chars = Character.toChars(needle);
166 for (
int i = s; i < l - 1; i++) {
167 final char hi = hay.charAt(i);
168 final char lo = hay.charAt(i + 1);
169 if (hi == chars[0] && lo == chars[1]) {
192 public static String
trim(
final String text,
final String separators,
final String replacement) {
196 final int len = text.length();
200 final StringBuilder sb =
new StringBuilder();
201 boolean lastMatched =
false;
202 if (separators ==
null) {
203 for(
int i=0; i < len; ++i) {
204 final int cp = text.codePointAt(i);
205 final boolean match = Character.isWhitespace(cp);
206 if ( !match || !lastMatched && 0 < i ) {
207 if( match &&
null != replacement ) {
208 sb.append(replacement);
210 sb.append(String.valueOf(Character.toChars(cp)));
216 sb.deleteCharAt(sb.length()-1);
219 for(
int i=0; i < len; ++i) {
220 final int cp = text.codePointAt(i);
221 final boolean match = separators.indexOf(cp) >= 0;
222 if ( !match || !lastMatched && 0 < i ) {
223 if( match &&
null != replacement ) {
224 sb.append(replacement);
226 sb.append(String.valueOf(Character.toChars(cp)));
232 sb.deleteCharAt(sb.length()-1);
235 return sb.toString();
254 public static List<String>
split(
final String text,
final int lineCount,
final String separators) {
255 final List<String> list =
new ArrayList<>();
256 if (text ==
null || 0 == lineCount) {
259 final int len = text.length();
263 if( 1 == lineCount ) {
267 final int segLen = (int)Math.ceil((
float)len / (float)lineCount * 0.9f);
271 if (separators ==
null) {
272 while (i < len && list.size() < lineCount - 1) {
273 if (Character.isWhitespace(text.codePointAt(i))) {
274 list.add(text.substring(start, i));
282 while (i < len && list.size() < lineCount - 1) {
283 if (separators.indexOf(text.codePointAt(i)) >= 0) {
284 list.add(text.substring(start, i));
293 list.add(text.substring(start, len));
315 public static String
split(
final String text,
final int lineCount,
final String separators,
final String lineSeparator) {
316 final List<String> lines =
split(text, lineCount, separators);
317 final StringBuilder sb =
new StringBuilder();
318 boolean addGlue =
false;
319 for(
final String l : lines) {
321 sb.append(lineSeparator);
326 return sb.toString();
Basic utility functions for String and CharSequence in general.
static boolean hasSpace(final int cp)
Returns true if given codepoint is either isFullwidth(int), isHalfwidth(int) or isWhitespace(int).
static List< String > split(final String text, final int lineCount, final String separators)
Returns an array of split text at separators or whitespace.
static int getLineCount(final CharSequence s)
Returns number of lines, i.e.
static final String WHITESPACE
List of ASCII & Unicode space separator, aka Whitespace.
static boolean isWhitespace(final int cp)
Return true if given codepoint in included within WHITESPACE.
static final char LF
Linefeed character unicode '\n', 0x000A.
static String trim(final String text, final String separators, final String replacement)
Remove all leading, trailing and duplicate-within separators unicode character from the text.
static final char SPACE
Space character unicode ' ', 0x0020.
static boolean isHalfwidth(final int cp)
Returns true if given codepoint is a halfwidth unicode character.
static boolean isFullwidth(final int cp)
Returns true if given codepoint is a fullwidth unicode character.
static String split(final String text, final int lineCount, final String separators, final String lineSeparator)
Returns a multi-line string of split text at separators or whitespace glued with given lineSeparator.
static int indexOf(final CharSequence hay, final int needle, final int start)
Naive implementation of String#indexOf(int, int) for type CharSequence.
static int indexOf(final String hay, final int needle, final int start)
Calls String#indexOf(int, int).
static final char CR
CR character unicode '\r', 0x000D.