?? stringutils.java
字號:
/*
* Copyright 2004-2008 H2 Group. Licensed under the H2 License, Version 1.0
* (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.h2.util;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import org.h2.constant.ErrorCode;
import org.h2.constant.SysProperties;
import org.h2.engine.Constants;
import org.h2.message.Message;
/**
* A few String utility functions.
*/
public class StringUtils {
public static boolean equals(String a, String b) {
if (a == null) {
return b == null;
}
return a.equals(b);
}
public static String toUpperEnglish(String s) {
return s.toUpperCase(Locale.ENGLISH);
}
public static String toLowerEnglish(String s) {
return s.toLowerCase(Locale.ENGLISH);
}
public static String getDefaultCharset() {
return SysProperties.FILE_ENCODING;
}
public static String quoteStringSQL(String s) {
StringBuffer buff = new StringBuffer(s.length() + 2);
buff.append('\'');
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '\'') {
buff.append(c);
} else if (c < ' ' || c > 127) {
// need to start from the beginning because maybe there was a \
// that was not quoted
return "STRINGDECODE(" + quoteStringSQL(javaEncode(s)) + ")";
}
buff.append(c);
}
buff.append('\'');
return buff.toString();
}
public static String javaEncode(String s) {
StringBuffer buff = new StringBuffer(s.length());
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
switch (c) {
// case '\b':
// // BS backspace
// // not supported in properties files
// buff.append("\\b");
// break;
case '\t':
// HT horizontal tab
buff.append("\\t");
break;
case '\n':
// LF linefeed
buff.append("\\n");
break;
case '\f':
// FF form feed
buff.append("\\f");
break;
case '\r':
// CR carriage return
buff.append("\\r");
break;
case '"':
// double quote
buff.append("\\\"");
break;
case '\\':
// backslash
buff.append("\\\\");
break;
default:
int ch = (c & 0xffff);
if (ch >= ' ' && (ch < 0x80)) {
buff.append(c);
// not supported in properties files
// } else if(ch < 0xff) {
// buff.append("\\");
// // make sure it's three characters (0x200 is octal 1000)
// buff.append(Integer.toOctalString(0x200 | ch).substring(1));
} else {
buff.append("\\u");
// make sure it's four characters
buff.append(Integer.toHexString(0x10000 | ch).substring(1));
}
}
}
return buff.toString();
}
public static String addAsterisk(String s, int index) {
if (s != null && index < s.length()) {
s = s.substring(0, index) + "[*]" + s.substring(index);
}
return s;
}
private static SQLException getFormatException(String s, int i) {
return Message.getSQLException(ErrorCode.STRING_FORMAT_ERROR_1, addAsterisk(s, i));
}
public static String javaDecode(String s) throws SQLException {
StringBuffer buff = new StringBuffer(s.length());
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '"') {
break;
} else if (c == '\\') {
if (i >= s.length()) {
throw getFormatException(s, s.length() - 1);
}
c = s.charAt(++i);
switch (c) {
case 't':
buff.append('\t');
break;
case 'r':
buff.append('\r');
break;
case 'n':
buff.append('\n');
break;
case 'b':
buff.append('\b');
break;
case 'f':
buff.append('\f');
break;
case '#':
// for properties files
buff.append('#');
break;
case '=':
// for properties files
buff.append('=');
break;
case ':':
// for properties files
buff.append(':');
break;
case '"':
buff.append('"');
break;
case '\\':
buff.append('\\');
break;
case 'u': {
try {
c = (char) (Integer.parseInt(s.substring(i + 1, i + 5), 16));
} catch (NumberFormatException e) {
throw getFormatException(s, i);
}
i += 4;
buff.append(c);
break;
}
default:
if (c >= '0' && c <= '9') {
try {
c = (char) (Integer.parseInt(s.substring(i, i + 3), 8));
} catch (NumberFormatException e) {
throw getFormatException(s, i);
}
i += 2;
buff.append(c);
} else {
throw getFormatException(s, i);
}
}
} else {
buff.append(c);
}
}
return buff.toString();
}
public static String quoteJavaString(String s) {
if (s == null) {
return "null";
} else {
return "\"" + javaEncode(s) + "\"";
}
}
public static byte[] utf8Encode(String s) throws SQLException {
try {
// TODO UTF8: String.getBytes("UTF-8") only returns 1 byte for
// 0xd800-0xdfff
return s.getBytes(Constants.UTF8);
} catch (UnsupportedEncodingException e) {
throw Message.convert(e);
}
}
public static String utf8Decode(byte[] utf8) {
try {
return new String(utf8, Constants.UTF8);
} catch (UnsupportedEncodingException e) {
throw Message.convertToInternal(e);
}
}
public static String utf8Decode(byte[] bytes, int offset, int length) {
try {
return new String(bytes, offset, length, Constants.UTF8);
} catch (UnsupportedEncodingException e) {
throw Message.convertToInternal(e);
}
}
public static String quoteJavaStringArray(String[] array) {
if (array == null) {
return "null";
}
StringBuffer buff = new StringBuffer(5 * array.length);
buff.append("new String[]{");
for (int i = 0; i < array.length; i++) {
if (i > 0) {
buff.append(", ");
}
buff.append(quoteJavaString(array[i]));
}
buff.append("}");
return buff.toString();
}
public static String quoteJavaIntArray(int[] array) {
if (array == null) {
return "null";
}
StringBuffer buff = new StringBuffer(2 * array.length);
buff.append("new int[]{");
for (int i = 0; i < array.length; i++) {
if (i > 0) {
buff.append(", ");
}
buff.append(array[i]);
}
buff.append("}");
return buff.toString();
}
public static String enclose(String s) {
if (s.startsWith("(")) {
return s;
} else {
return "(" + s + ")";
}
}
public static String unEnclose(String s) {
if (s.startsWith("(") && s.endsWith(")")) {
return s.substring(1, s.length() - 1);
} else {
return s;
}
}
public static String urlEncode(String s) {
//#ifdef JDK14
try {
return URLEncoder.encode(s, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return s;
}
//#endif
//#ifdef JDK13
/*
return URLEncoder.encode(s);
*/
//#endif
// byte[] utf = utf8Encode(s);
// StringBuffer buff = new StringBuffer(utf.length);
// for(int i=0; i<utf.length; i++) {
//
// buff.append()
// }
}
public static String urlDecode(String encoded) throws SQLException {
byte[] buff = new byte[encoded.length()];
int j = 0;
for (int i = 0; i < encoded.length(); i++) {
char ch = encoded.charAt(i);
if (ch == '+') {
buff[j++] = ' ';
} else if (ch == '%') {
buff[j++] = (byte) Integer.parseInt(encoded.substring(i + 1, i + 3), 16);
i += 2;
} else {
if (SysProperties.CHECK && (ch > 127 || ch < ' ')) {
throw new IllegalArgumentException("unexpected char " + (int) ch + " decoding " + encoded);
}
buff[j++] = (byte) ch;
}
}
String s = utf8Decode(buff, 0, j);
return s;
}
public static String[] arraySplit(String s, char separatorChar, boolean trim) {
if (s == null) {
return null;
}
if (s.length() == 0) {
return new String[0];
}
ArrayList list = new ArrayList();
StringBuffer buff = new StringBuffer(s.length());
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -