blob: e914b600cb3abd2fd7a3c04fd1a08e4e05d4a01b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 Sybase, Inc. and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Sybase, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.jsf.common.ui.internal.utils;
import java.util.regex.Pattern;
/**
* This is tool class for String processing.
*
* @author mengbo
*/
public class StringUtil {
// pattern to find all end-of-paragraph and end-of-line html tags
// so they can be converted to newlines
final private static Pattern htmlToNewline = Pattern.compile("</p>|<br>"); //$NON-NLS-1$
// pattern to strip all <x> and </x> HTML tags
final private static Pattern removeHTMLTags = Pattern.compile("<[/?\\w\\s=\"\\.\\#]+>"); //$NON-NLS-1$
// pattern to find all runs of spaces longer than one
final private static Pattern trimInteriorWhitespace = Pattern.compile("[ ]+"); //$NON-NLS-1$
/**
* Split a java variable name into words For example, "_aJavaVariable" will
* split to "A Java Variable", "_aWTPPackageImplementation" will be "A WTP
* Package Implementation"
*
* @param variable
* @return String
*/
public static String splitVariable(String variable) {
StringBuffer output = new StringBuffer(""); //$NON-NLS-1$
boolean isCapitalLeading = false;
boolean isLastSpace = false;
for (int i = 0, n = variable.length(); i < n; i++) {
char letter = variable.charAt(i);
if (letter == '_' || letter == '$') {
output.append(" "); //$NON-NLS-1$
isCapitalLeading = false;
isLastSpace = true;
continue;
}
if (Character.isLowerCase(letter)) {
int nextIndex = i + 1;
if (nextIndex < n) {
char nextLetter = variable.charAt(nextIndex);
if (Character.isUpperCase(nextLetter)) {
if (isCapitalLeading) {
output.append(letter);
isLastSpace = false;
} else {
output.append(Character.toUpperCase(letter));
isLastSpace = false;
}
if (!isLastSpace) {
output.append(' ');
isLastSpace = true;
}
isCapitalLeading = false;
continue;
}
}
}
if (Character.isUpperCase(letter)) {
int nextIndex = i + 1;
if (nextIndex < n) {
char nextLetter = variable.charAt(nextIndex);
if (Character.isLowerCase(nextLetter)) {
if (!isLastSpace) {
output.append(' ');
isLastSpace = true;
}
output.append(letter);
isCapitalLeading = true;
isLastSpace = false;
continue;
}
}
}
if (isCapitalLeading) {
output.append(letter);
isLastSpace = false;
} else {
output.append(Character.toUpperCase(letter));
isCapitalLeading = true;
isLastSpace = false;
}
}
return output.toString().trim();
}
/**
* @param str1
* @param str2
* @return boolean
*
* Check if two strings match or not if str1=null and str2=null, it will
* return true
*/
public static boolean isSameString(String str1, String str2) {
if (str1 == null) {
return str2 == null;
}
return str1.equals(str2);
}
/**
*
* @param text
* @return String Filter and convert a string, or normalize a string For
* example,
* <p>
* test
* </p>
* test1<a/> will be converted to: test\ntest1
*
*/
public static String filterConvertString(String text) {
if (text == null) {
return ""; //$NON-NLS-1$
}
String result = htmlToNewline.matcher(text).replaceAll("\n"); //$NON-NLS-1$
result = removeHTMLTags.matcher(result).replaceAll(""); //$NON-NLS-1$
result = trimInteriorWhitespace.matcher(result).replaceAll(" "); //$NON-NLS-1$
return result;
}
/**
* Determine whether a string is empty or not Example: null string -> return
* true; Example: "" string -> return true; Otherwise, will return false;
* @param str
*
* @return true if str is null or empty
*/
public static boolean isEmptyString(String str) {
if (str == null || str.length() == 0) {
return true;
}
return false;
}
}