import java.util.ArrayList;
import java.util.Calendar;
import java.util.StringTokenizer;
import java.lang.Integer;
/**
* 字符串辅助类,处理常用的字符串操作
*
* @author lvx@cic.tsinghua.edu.cn 创建日期: 2009.07.14
*/
public class StringUtil {
public static String filterNull(String arg){
if(null != arg && arg.length() > 0){
return arg;
}else{
return "";
}
}
/**
* 将字符串转化为整数
* @param str String
* @return int
*/
public static int parseInt(String str) {
try {
return Integer.parseInt(str);
}
catch (NumberFormatException e) {
return 0;
}
}
/**
* 处理字符串:如果为null,则返回空串
* @param sIn String
* @return String
*/
public static String nvl(String sIn) {
return (sIn == null) ? "" : sIn;
}
/**
* 如果字符串为null或空串,转换为缺省的字符串
* @param sIn String
* @param sDefault String 缺省的字符串
* @return String
*/
public static String nvl(String sIn, String sDefault) {
return (sIn == null) ? sDefault : sIn;
}
/**
* 将字符串首字母大写
* @param src String
* @return String
*/
public static String capital(String src) {
String result = "";
if (src == null || src.length() == 0) {
return "";
}
else {
try {
result = src.substring(0, 1).toUpperCase() + src.substring(1);
}
catch (Exception e) {
result = "";
}
}
return result;
}
public static String formatDate(String date){
//1.判断是否合法
if(null != date && date.length() != 8){
return "";
}
//2.转换
StringBuffer d = new StringBuffer();
d.append(date.substring(0, 4));
d.append("-");
d.append(date.substring(4, 6));
d.append("-");
d.append(date.substring(6, 8));
return d.toString();
}
/**
* 缺省的字符串分割符
*/
public static String DEFAULT_DELIM = "$*";
/**
* 私有构造方法,防止类的实例化,因为工具类不需要实例化。
*/
private StringUtil() {
}
/**
* 判断是否为空
*
* @param array 字符串
* @return boolean
*/
public static boolean isNull(String s){
if(null != s && s.length() > 0){
return true;
}else{
return false;
}
}
/**
* 将字符串数组使用缺省的分隔符合并成一个字符串。
*
* @param array 字符串数组
* @return 合并后的字符串
*/
public static String join(String[] array) {
return join(array, DEFAULT_DELIM);
}
/**
* 将字符串数组使用指定的分隔符合并成一个字符串。
*
* @param array 字符串数组
* @param delim 分隔符,为null的时候使用缺省分割符(逗号)
* @return 合并后的字符串
*/
public static String join(String[] array, String delim) {
int length = array.length - 1;
if (delim == null) {
delim = DEFAULT_DELIM;
}
StringBuffer result = new StringBuffer(length * 8);
for (int i = 0; i < length; i++) {
result.append(array[i]);
result.append(delim);
}
result.append(array[length]);
return result.toString();
}
/**
* 将字符串使用缺省分割符(逗号)划分的单词数组。
*
* @param source 需要进行划分的原字符串
* @return 划分以后的数组,如果source为null的时候返回以source为唯一元素的数组。
*/
public static String[] split(String source) {
return split(source, DEFAULT_DELIM);
}
/**
* 此方法将给出的字符串source使用delim划分为单词数组。 注意:分隔字符串中每一个 <b>(ANY) </b>的字符都作为独立的分割符。 <br>
* 举个例子: <br>
* "mofit.com.cn"用"com"分割后的结果是三个字符串"fit."、"."和"n",而不是"mofit."和".cn"。
*
* @param source 需要进行划分的原字符串
* @param delim 单词的分隔字符串
* @return 划分以后的数组,如果source为null的时候返回以source为唯一元素的数组, 如果delim为null则使用逗号作为分隔字符串。
*/
public static String[] split(String source, String delim) {
String[] wordLists;
if (source == null) {
wordLists = new String[1];
wordLists[0] = source;
return wordLists;
}
if (delim == null) {
delim = DEFAULT_DELIM;
}
StringTokenizer st = new StringTokenizer(source, delim);
int total = st.countTokens();
wordLists = new String[total];
for (int i = 0; i < total; i++) {
wordLists[i] = st.nextToken();
}
return wordLists;
}
/**
* 字符串数组中是否包含指定的字符串。 注意:准确的说应该是匹配,而不是包含。 <br>
* 举个例子:字符串数组"mofit.com.cn","neusoft.com"里 <b>不包含 </b>"com", <br>
* 但是 <b>包含 </b>"mofti.com.cn"。
*
* @param strings 字符串数组
* @param string 字符串
* @param caseSensitive 是否大小写敏感
* @return 包含时返回true,否则返回false
*/
public static boolean contains(String[] strings, String string, boolean caseSensitive) {
for (int i = 0; i < strings.length; i++) {
if (caseSensitive == true) {
if (strings[i].equals(string)) {
return true;
}
} else {
if (strings[i].equalsIgnoreCase(string)) {
return true;
}
}
}
return false;
}
/**
* 字符串数组中是否包含指定的字符串。大小写敏感。 <br>
* 注意:准确的说应该是匹配,而不是包含。 <br>
* 举个例子:字符串数组"mofit.com.cn","neusoft.com"里 <b>不包含 </b>"com", <br>
* 但是 <b>包含 </b>"mofti.com.cn"。
*
* @param strings 字符串数组
* @param string 字符串
* @return 包含时返回true,否则返回false
*/
public static boolean contains(String[] strings, String string) {
return contains(strings, string, true);
}
/**
* 去除左边多余的空格。
*
* @param value 待去左边空格的字符串
* @return 去掉左边空格后的字符串
*/
public static String trimLeft(String value) {
String result = value;
if (result == null) {
return result;
}
char ch[] = result.toCharArray();
int index = -1;
for (int i = 0; i < ch.length; i++) {
if (Character.isWhitespace(ch[i])) {
index = i;
} else {
break;
}
}
if (index != -1) {
result = result.substring(index + 1);
}
return result;
}
/**
* 去除右边多余的空格。
*
* @param value 待去右边空格的字符串
* @return 去掉右边空格后的字符串
*/
public static String trimRight(String value) {
String result = value;
if (result == null) {
return result;
}
char ch[] = result.toCharArray();
int endIndex = -1;
for (int i = ch.length - 1; i > -1; i--) {
if (Character.isWhitespace(ch[i])) {
endIndex = i;
} else {
break;
}
}
if (endIndex != -1) {
result = result.substring(0, endIndex);
}
return result;
}
/**
* 得到字符串的字节长度。汉字占两个字节,字母占一个字节
*
* @param source 字符串
* @return 字符串的字节长度
*/
public static int getLength(String source) {
int len = 0;
for (int i = 0; i < source.length(); i++) {
char c = source.charAt(i);
int highByte = c >>> 8;
len += highByte == 0 ? 1 : 2;
}
return len;
}
/**
* 使用给定的字串替换源字符串中指定的字串。
*
* @param mainString 源字符串
* @param oldString 被替换的字串
* @param newString 替换字串
* @return 替换后的字符串
*/
public final static String replace(String mainString, String oldString, String newString) {
if (mainString == null) {
return null;
}
int i = mainString.lastIndexOf(oldString);
if (i < 0) {
return mainString;
}
StringBuffer mainSb = new StringBuffer(mainString);
while (i >= 0) {
mainSb.replace(i, i + oldString.length(), newString);
i = mainString.lastIndexOf(oldString, i - 1);
}
return mainSb.toString();
}
/**
* 将给定的字符串转换为中文GBK编码的字符串。
*
* @param str 输入字符串
* @return 经GBK编码后的字符串,如果有异常,则返回原编码字符串
*/
public final static String toChinese(final String str) {
if (null == str || "".equals(str)) {
return str;
}
String retVal = str;
try {
retVal = new String(str.getBytes("ISO8859_1"), "GBK");
} catch (Exception e) {
System.err.println(e.getMessage());
}
return retVal;
}
/**
* 将给定的中文GBK编码转换为UNICODE编码的字符串。
*
* @param str 输入字符串
* @return 经GBK编码后的字符串,如果有异常,则返回原编码字符串
*/
public final static String toUNICODE(final String str) {
if (null == str || "".equals(str)) {
return str;
}
String retVal = str;
try {
retVal = new String(str.getBytes("ZHS16GBK"), "GBK");
} catch (Exception e) {
System.err.println(e.getMessage());
}
return retVal;
}
/**
* 用于字符串显示。将html敏感的尖括号、引号、连接号等用转义符替代。 <br>
* 建议用法:在接收到客户端传来的字符串时,不进行转换,直接存入数据库; <br>
* 在从数据库中取出,传给客户端做html显示时,才转换。
*
* @param input 需要检查的字符串
* @return 转化后的字串
*/
public final static String convertToHTML(String input) {
if (null == input || "".equals(input)) {
return input;
}
StringBuffer buf = new StringBuffer();
char ch = ' ';
for (int i = 0; i < input.length(); i++) {
ch = input.charAt(i);
if (ch == '<') {
buf.append("<");
} else if (ch == '>') {
buf.append(">");
} else if (ch == '&') {
buf.append("&");
} else if (ch == '"') {
buf.append(""");
} else if (ch == '\n') {
buf.append("<BR/>");
} else {
buf.append(ch);
}
}
return buf.toString();
}
/**
* 定义字符串加密时需要用到的标记字符串
*/
private static String ENCRYPT_IN = "YN8K1JOZVURB3MDETS5GPL27AXW`IHQ94C6F0~qwert!@yuiop#$asdfghj%kl^&*zxc vbn(m)_+|{}:\"<>?-=\\[];,./'";
/**
* 定义字符串加密时需要用到的转义字符串
*/
private static String ENCRYPT_OUT = "qazwsxcderfvbgtyhnmjuiklop~!@#$%^&*()_+|{ }:\"<>?-=\\[];,./'ABCDE`FGHIJKLMNOPQRSTUVWXYZ0123456789";
/**
* 对给定字符串进行加密操作
*
* @param inPass 待加密的字符串
* @return 加密后的字符串
*/
public static String encrypt(String inPass) {
String stringIn = ENCRYPT_IN;
String stringOut = ENCRYPT_OUT;
int time1 = Calendar.getInstance().get(Calendar.MINUTE);
int time2 = Calendar.getInstance().get(Calendar.SECOND);
int offset = (time1 + time2) % 95;
String outPass = stringIn.substring(offset, offset + 1);
stringIn = stringIn + stringIn;
stringIn = stringIn.substring(offset, offset + 95);
String temp = "";
for (int i = 0; i <= inPass.length() - 1; i++) {
temp = temp + stringOut.charAt(stringIn.indexOf(inPass.charAt(i)));
}
outPass = outPass + temp;
return outPass;
}
/**
* 对给定字符串进行解密操作
*
* @param outPass 待解密的字符串
* @return 解密还原后的字符串
*/
public static String decrypt(String outPass) {
String stringIn = ENCRYPT_IN;
String stringOut = ENCRYPT_OUT;
int offset = stringIn.indexOf(outPass.charAt(0));
stringIn = stringIn + stringIn;
stringIn = stringIn.substring(offset, offset + 95);
outPass = outPass.substring(1);
String inPass = "";
for (int i = 0; i <= outPass.length() - 1; i++) {
inPass = inPass + stringIn.charAt(stringOut.indexOf(outPass.charAt(i)));
}
return inPass;
}
//指定的字符串累加
public static String strAdd(String chr, int len) {
if (len > 0) {
StringBuffer ret = new StringBuffer(len);
for (int i = 0; i < len; i++) {
ret.append(chr);
}
return (ret.toString());
} else {
return "";
}
}
//给字符串补足到指定的长度,从左边补足chr指定的字符
public static String lPad(String source, String chr, int len) {
int lenleft = len - source.length();
if (lenleft < 0) {
lenleft = 0;
}
return (strAdd(chr, lenleft) + source);
}
//给字符串补足到指定的长度,从右边补足chr指定的字符
public static String rPad(String source, String chr, int len) {
int lenleft = len - source.length();
if (lenleft < 0) {
lenleft = 0;
}
return (source + strAdd(chr, lenleft));
}
public static void main(String[] args) {
String[] test = { "北京 mofit. com. cn", " neusoft.com ", "<out\"OfTax>" };
String all = join(test, "||");
System.out.println("字符串[" + test[0] + "],[" + test[1] + "],[" + test[2] + "]合并结果:" + all);
System.out.println("字符串[" + test[0] + "],[" + test[1] + "],[" + test[2] + "]是否包含[<out\"oftax>](区分大小写):" + contains(test, "<out\"oftax>"));
System.out.println("字符串[" + test[0] + "],[" + test[1] + "],[" + test[2]+ "]是否包含[<out\"oftax>](不区分大小写):" + contains(test, "<out\"oftax>", false));
System.out.println("字符串[" + all + "]转换为html:" + convertToHTML(all));
String en = encrypt(test[2]);
System.out.println("字符串[" + test[2] + "]加密后为:" + en);
System.out.println("字符串[" + en + "]解密后为:" + decrypt(en));
System.out.println("字符串[" + test[0] + "]的长度为:" + getLength(test[0]));
System.out.println("字符串[" + all + "]用[Company]替换[.com]后为:["
+ replace(all, ".com", "Company") + "]");
String[] sp = split(test[0], "com");
System.out.println("字符串[" + test[0] + "]用[com]分隔为" + sp.length + "个字符串。分别为:[" + sp[0] + "],[" + sp[1] + "],[" + sp[2] + "]...");
System.out.println("字符串[" + test[1] + "]去掉左空格为:[" + trimLeft(test[1]) + "]");
System.out.println("字符串[" + test[1] + "]去掉右空格为:[" + trimRight(test[1]) + "]");
System.out.println("字符串[" + test[1] + "]去掉空格为:[" + removeBlank(test[1]) + "]");
}
/**
* 取小数点后1位
* @param f float
* @return float
*/
public static float roundFloat(float f) {
float result = (float)((int)((f + 0.0005) * 1000)/10.0);
return result;
}
/**
* 取小数点后一位
*/
public static String round(float f){
String temp = (f + 0.05) + "";
if(null != temp && temp.length() > 0){
temp = temp.substring(0,temp.lastIndexOf(".") + 2);
}
return temp;
}
/**
* 去掉字符串中的空格
* @param str
* @return String
*/
public static String removeBlank(String str){
StringBuilder sb = new StringBuilder();
char c = ' ';
for(int i = 0 ; i < str.length() ; i++){
char ch = str.charAt(i);
if(ch != c){
sb.append(ch);
}
}
return sb.toString();
}
}
分享到:
相关推荐
java字符串处理的util工具类,也可以同时添加一些其他字符处理的方法,对于项目中特殊字符处理,完成项目中基本的字串符处理。
JAVA字符串操作类CTool.java字符转换类,此类中收集Java编程中WEB开发常用到的一些工具。为避免生成此类的实例,构造方法被申明为private类型的。封装的功能:字符串从GBK编码转换为Unicode编码、对字符串进行md5...
除了这些基本的字符串处理类,Java还包含`Pattern`和`Matcher`类来处理正则表达式。`Pattern`类用于编译正则表达式模式,而`Matcher`类用于在给定输入字符串中查找匹配的模式。这两个类可以执行复杂的文本分析和模式...
java 常用字符串处理工具类! java 常用字符串处理工具类!
1.删除字符 2.去空格 3.去除所有空格和特殊字符 4.判断邮箱 5.字符串集合转字符串 6.只保留汉字 7.关键词前后是否包含英文字母 8.去除字符串中的附件 9.获取下标单个位置和所有位置
首先,我们要明白Java中的字符串是`String`类的对象,它提供了丰富的API用于字符串的处理。例如,我们可以使用`substring()`方法来截取字符串的一部分,但这并不适用于提取括号内的内容,因为我们需要识别开括号和闭...
Java提供了两种主要的方式来创建字符串:通过`String`类的构造方法和使用`StringBuilder`或`StringBuffer`类。以下是对这些知识点的详细解释: 1. **String类**: - **不可变性**:Java中的`String`对象是不可变的...
Java字符串中${}或者{}等占位符替换工具类 Java字符串中${}或者{}等占位符替换工具类是一个功能强大且实用的工具类,它可以将Java字符串中的占位符依次替换为指定的值。该工具类的主要功能是实现占位符的替换,即将...
在Java编程语言中,字符串处理是一项基础且重要的任务。在这个特定的场景中,我们需要创建一个Applet程序,它能够接收用户输入的字符串和一个字符,然后从原始字符串中删除所有出现的指定字符,并显示处理后的结果。...
### Java中的字符串相关处理 #### 引言 在Java编程语言中,字符串处理是一个核心且广泛使用的领域。不同于其他编程语言将字符串视为字符数组,Java将字符串视为`String`类型对象,这一设计使得字符串处理更加高效...
本文将围绕“java字符串练习”这一主题,深入探讨如何解析字符串、逆序输出字符串以及处理特定格式的字符串数据。 首先,我们要讨论的是字符串解析。在Java中,我们可以使用`String`类提供的方法或正则表达式来实现...
通过运行和调试这些代码,你可以加深对Java字符串、正则表达式以及日期时间格式化的理解。 总之,理解和熟练掌握Java中的字符串操作、正则表达式以及日期时间格式化对于任何Java开发者来说都是必不可少的技能。通过...
`StringUtil` 类是基于Java标准库的 `String` 类进行扩展的,它提供了更丰富的接口,使得开发者在处理字符串时更加便捷。这个类可能还包含了其他高级功能,如去除特殊字符、格式化输出、URL编码解码等,这些都极大地...
### Java中文字符处理知识点 #### 一、判断字符串是否全为汉字 为了判断一个字符串是否完全由汉字组成,可以通过正则表达式实现。具体做法是使用Unicode编码范围内的汉字字符来构建一个匹配模式。 **代码示例:**...
### Java处理字符和字符串知识点详解 #### 一、概述 在Java编程中,字符和字符串是最常见的数据类型之一。为了方便高效地处理这些数据类型,Java提供了强大的支持,包括`Character`类和`String`类等。这些类位于`...
Java中的字符串处理是编程的基础之一,理解`String`和`StringBuffer`的区别以及如何使用这些类对于开发高质量的Java应用程序至关重要。掌握字符串的构造方法和操作技巧可以帮助开发者编写出更加高效、易于维护的代码...
Java字符流主要用于处理基于Unicode编码的字符数据,它分为输入流(Reader)和输出流(Writer),用于读取和写入字符数据。 实验的核心知识点主要包括: 1. **Java流的层次结构**:Java流被组织成一个层次结构,...
Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流和 java 内 Unicode 字符流之间的转换。而类 InputStreamReader 和 OutputStreamWriter 处理字符流和字节流的转换。字符流(一次可以处理...
### Java字符串查找和提取异常处理 #### 概述 本文将详细介绍如何在Java中实现字符串查找与提取功能,并在此过程中妥善处理可能出现的各种异常情况。通过分析提供的代码示例`IndexOfAndCharAt.java`,我们将了解到...
总的来说,通过理解Unicode编码和Java的字符处理机制,我们可以有效地处理中文字符。在实际项目中,这样的工具类对于处理中文字符的检测和统计是非常有用的,能够提高代码的可读性和复用性。在Java中处理字符串,...