java 常用类整理一(字符串处理类)

本文介绍了一个实用的Java字符串工具类,提供了多种字符串操作方法,如格式化、判断空值、编码转换等,并展示了如何使用这些方法来简化常见的字符串处理任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键字: java 常用类 字符串
今天先整理下自己常用的一些字符串常用类:

Java代码
1.import java.io.*;
2.import java.text.DecimalFormat;
3.import org.apache.oro.text.regex.PatternCompiler;
4.import org.apache.oro.text.regex.PatternMatcher;
5.import org.apache.oro.text.regex.Perl5Matcher;
6.import org.apache.oro.text.regex.Pattern;
7.import org.apache.oro.text.regex.Perl5Compiler;
8.
9.import org.apache.commons.logging.Log;
10./**
11. * <p>Title: StringUtils</p>
12. * <p>Description: 字符串工具类; 配合JakartaCommons工具类使用;</p>
13. * <p>Copyright: Copyright (c) 2003</p>
14. * <p>Company: pubinfo</p>
15. * @author chineseren
16. * @version 1.0
17. */
18.public class StringUtils {
19. /**
20. * debug log
21. */
22. private static Log log = Debuger.getDebuger(StringUtils.class);
23. /**
24. * String charSet 转化
25. * @param str String
26. * @return String
27. */
28. public static String toChinese(String str) {
29. if(str == null || str.length() == 0) {
30. return "";
31. }
32. try {
33. return new String(str.getBytes("ISO8859_1"), "GBK");
34. } catch(UnsupportedEncodingException ex) {
35. return str;
36. }
37. }
38.
39. /**
40. * 判断字符串是否null或者""
41. * @param src String
42. * @return boolean
43. */
44. public static boolean isBlank(String src) {
45. if(null == src || "".equals(src.trim())) {
46. return true;
47. }
48. return false;
49. }
50.
51. /**
52. * @param string - 待判断的字符串是否为null或者空字符串
53. * @return boolean
54. * @roseuid 3FBE26DE0326
55. */
56. public static boolean isNullOrEmpty(String string) {
57. if(string == null || string.trim().equals("")) {
58. return true;
59. } else {
60. return false;
61. }
62. }
63.
64. /**
65. * 把没有实例化的串转化为空串
66. * @param p_in String
67. * @return String
68. */
69. public static String convertNull(String str) {
70. if(str == null) {
71. return "";
72. } else {
73. return str;
74. }
75. }
76.
77. /**
78. * 控制页面显示长度,dataStr为控制长度的字符串,length为字节的长度;
79. * 字符串的字节长度小于显示长度,则原样输出,否则以XXX...的形式输出。
80. * @param dataStr String
81. * @param length int
82. * @return String
83. */
84. public static String controlLength(String dataStr, int length) {
85. if(dataStr == null) {
86. return "";
87. }
88. //转化成格式化的Html
89. dataStr = StringUtils.escape(dataStr);
90.
91. StringBuffer sb = new StringBuffer();
92. char datach;
93. int lengthi = 0; //字符串的字节长度
94. int strj = 0; //字符串的实际长度
95. int lengthi3 = 0; //字节长度-4
96. //得到字符串的字节长度
97. while(strj < dataStr.length()) {
98. datach = dataStr.charAt(strj++);
99. if(((datach <= 'z') && (datach >= 'a'))
100. || ((datach <= 'Z') && (datach >= 'A'))
101. || ((datach <= '9') && (datach >= '0'))) {
102. lengthi++;
103. } else {
104. lengthi = lengthi + 2;
105. }
106. }
107. strj = 0;
108. //得到字符串的字节长度-4
109. while((lengthi3 < length - 4) && (strj < dataStr.length())) {
110. datach = dataStr.charAt(strj++);
111. sb.append(datach);
112. if(((datach <= 'z') && (datach >= 'a'))
113. || ((datach <= 'Z') && (datach >= 'A'))
114. || ((datach <= '9') && (datach >= '0'))) {
115. lengthi3++;
116. } else {
117. lengthi3 = lengthi3 + 2;
118. }
119. }
120. if(lengthi <= length) {
121. return dataStr;
122. } else {
123. sb.append("...");
124. }
125. return sb.toString();
126. }
127.
128. /**
129. * 把字符串转化成HTML字符串
130. * @param str --需要转换的字符串
131. * @return String --返回把特殊字符转换了的字符串
132. */
133. public static String escape(String str) {
134. if(str == null) {
135. return "";
136. }
137. byte[] data = str.getBytes();
138. int len = data.length;
139. StringBuffer result = new StringBuffer(len * 2);
140.
141. int begin = 0, count = 0, tt = 0;
142. for(int i = 0; i < len; i++) {
143. switch((char)data[i]) {
144. case '&':
145. result.append(new String(data, begin, count));
146. result.append("&");
147. begin = i + 1;
148. count = 0;
149. break;
150. case '\"':
151. result.append(new String(data, begin, count));
152. result.append(""");
153. begin = i + 1;
154. count = 0;
155. break;
156. case '<':
157. result.append(new String(data, begin, count));
158. result.append("<");
159. begin = i + 1;
160. count = 0;
161. break;
162. case '>':
163. result.append(new String(data, begin, count));
164. result.append(">");
165. begin = i + 1;
166. count = 0;
167. break;
168. case '\n':
169. result.append(new String(data, begin, count));
170. result.append("<br>");
171. begin = i + 1;
172. count = 0;
173. break;
174. case '$':
175. result.append(new String(data, begin, count));
176. result.append("$$");
177. begin = i + 1;
178. count = 0;
179. break;
180. case ' ':
181. result.append(new String(data, begin, count));
182. result.append(" ");
183. begin = i + 1;
184. count = 0;
185. break;
186. default:
187. count++;
188. break;
189. }
190. }
191. if(count > 0) {
192. result.append(new String(data, begin, count));
193. }
194. return result.toString();
195. }
196.
197.
198. /**
199. * 把字符串转化成HTML字符串(除了空格)
200. * @param str --需要转换的字符串
201. * @return String --返回把特殊字符转换了的字符串
202. */
203. public static String escape2(String str) {
204. if(str == null) {
205. return "";
206. }
207. byte[] data = str.getBytes();
208. int len = data.length;
209. StringBuffer result = new StringBuffer(len * 2);
210.
211. int begin = 0, count = 0, tt = 0;
212. for(int i = 0; i < len; i++) {
213. switch((char)data[i]) {
214. case '&':
215. result.append(new String(data, begin, count));
216. result.append("&");
217. begin = i + 1;
218. count = 0;
219. break;
220. case '\"':
221. result.append(new String(data, begin, count));
222. result.append(""");
223. begin = i + 1;
224. count = 0;
225. break;
226. case '<':
227. result.append(new String(data, begin, count));
228. result.append("<");
229. begin = i + 1;
230. count = 0;
231. break;
232. case '>':
233. result.append(new String(data, begin, count));
234. result.append(">");
235. begin = i + 1;
236. count = 0;
237. break;
238. case '\n':
239. result.append(new String(data, begin, count));
240. result.append("<br>");
241. begin = i + 1;
242. count = 0;
243. break;
244. case '$':
245. result.append(new String(data, begin, count));
246. result.append("$$");
247. begin = i + 1;
248. count = 0;
249. break;
250. default:
251. count++;
252. break;
253. }
254. }
255. if(count > 0) {
256. result.append(new String(data, begin, count));
257. }
258. return result.toString();
259. }
260.
261.
262. /**
263. * 将textarea输入的文本转化成前台html显示的格式,主要将回车(/r/n)替换成<br>," "替换成 
264. * @param text String
265. * @return String
266. */
267. public static String textConvertToHtmlText(String text){
268. if(text != null){
269. return text.replaceAll("\r\n", "<br>").replaceAll(" ", " ");
270. }else{
271. return null;
272. }
273. }
274. /**
275. * 全数字判断
276. * @param strIn String
277. * @return boolean
278. */
279. public static boolean isNumberString(String strIn) {
280. return isNumberString(strIn, "0123456789");
281. }
282.
283. /**
284. * 全数字判断,参照字符串strRef可以是:"0123456789","23546"或"0123"等等。
285. * @param strIn String
286. * @param strRef String
287. * @return boolean
288. */
289. public static boolean isNumberString(String strIn, String strRef) {
290. if(strIn == null || strIn.length() == 0)
291. return(false);
292. for(int i = 0; i < strIn.length(); i++) {
293. String strTmp = strIn.substring(i, i + 1);
294. if(strRef.indexOf(strTmp, 0) == -1)
295. return(false);
296. }
297. return(true);
298. }
299.
300. /**
301. * 字符串替换,调用了org.apache.commons.lang.StringUtils.replace()
302. * @param strObj 目标字符串
303. * @param str1 被替换的字符串
304. * @param str2 替换成的字符串
305. * @return String
306. */
307. public static String replace(String strObj, String str1, String str2) {
308. if("".equals(str1)) {
309. return strObj;
310. }
311. return org.apache.commons.lang.StringUtils.replace(strObj, str1, str2);
312. }
313. /**
314. * 根据内容生成摘要
315. * @param content String
316. * @return String
317. */
318. public static String createSummary(String content){
319. if(content == null)return null;
320. String regexp = "<.*?>";
321. //System.out.println(regexp);
322. content = content.replaceAll(regexp,"");
323. int len = content.length();
324. if(len > 120){
325. return content.substring(0, 120);
326. }else{
327. return content;
328. }
329. }
330.
331. /**
332. * 字符串切割,比如"#sd#kf##dkf##Ej#"按照"#"切割之后length=8,即"#"出现的次数加一
333. * @param strObj 目标字符串
334. * @param str1 用于切割的字符串
335. * @return String[]
336. */
337. public static String[] split(String strObj, String delimiter) {
338. if(strObj == null) {
339. return null;
340. }
341. if("".equals(strObj) || "".equals(delimiter)) {
342. return new String[] {
343. strObj};
344. }
345.
346. int count = org.apache.commons.lang.StringUtils.countMatches(strObj,
347. delimiter) + 1; //调用org.apache.commons
348. int length = delimiter.length();
349. String[] strs = new String[count];
350. int posPre = 0 - length;
351. int pos = 0;
352. for(int i = 0; i < count - 1; i++) {
353. pos = strObj.indexOf(delimiter, posPre + length);
354. strs[i] = strObj.substring(posPre + length, pos);
355. posPre = pos;
356. }
357. strs[count - 1] = strObj.substring(posPre + length);
358. return strs;
359. }
360.
361. /**
362. * 用于转义单斜杠特殊字符
363. * @param str String
364. * @return String
365. */
366. public static final String appendStr(String str) {
367. char c = ' ';
368. StringBuffer sb = new StringBuffer();
369. for(int i = 0; i < str.length(); i++) {
370. c = str.charAt(i);
371. if(c == '\\') {
372. sb.append("\\\\");
373. } else {
374. sb.append(c);
375. }
376. }
377. return sb.toString();
378. }
379.
380. /**
381. * 将reader流中的数据变成String
382. * @param is reader流
383. * @return String
384. * @throws IOException
385. */
386. public static String readerToString(Reader is) throws IOException {
387. StringBuffer sb = new StringBuffer();
388. char[] b = new char[8192];
389. int n;
390. while((n = is.read(b)) > 0) {
391. sb.append(b, 0, n);
392. }
393. return sb.toString();
394. }
395.
396. /**
397. * 将input流中的数据变成String
398. * @param is InputStream流
399. * @throws IOException
400. * @return String
401. */
402. public static String inputStreamToString(InputStream is) throws IOException {
403. return readerToString(new InputStreamReader(is));
404. }
405.
406. /**
407. * 返回字符串的前len个字符.例如:输入"abcdefg",3 返回 "abc".
408. * @param value String
409. * @param len int
410. * @return String
411. */
412. public static String getLmtStr(String value, int len) {
413. if(value == null || value.length() <= len)
414. return value;
415. return value.substring(0, len);
416. }
417. /**
418. * 返回字符串的前len个字符.例如:输入"abcdefg",3 返回 "abc...".
419. * @param value String
420. * @param len int
421. * @return String
422. */
423. public static String getLmtString(String value, int len) {
424. if(value == null || value.length() <= len)
425. return value;
426. return value.substring(0, len) + "...";
427. }
428. /**
429. * 输入带html标签的字符串,返回干净的字符串,其中将( ->" "),(<br>->\r\n),(<p>->\r\n\r\n)
430. * @param body String
431. * @return String
432. */
433. public static String getCleanString(String body) {
434. //替换 ->" ",<br>->\r\n <p>->\r\n\r\n
435. body = body.replaceAll("&[nN][bB][sS][pP];"," ");
436. body = body.replaceAll("<[bB][rR]\\s*>","\r\n");
437. body = body.replaceAll("<[pP]\\s*>","\r\n\r\n");
438. //删除所有标签
439.
440. body = body.replaceAll("<.+?>","");
441. return body;
442.// String htmlStr = body; //含html标签的字符串
443.// String textStr = "";
444.//
445.//
446.// try {
447.// //定义script的正则表达式{或<script[^>]*?>[\\s\\S]*?<\\/script> }
448.// String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>";
449.// //定义style的正则表达式{或<style[^>]*?>[\\s\\S]*?<\\/style> }
450.// String regEx_style = "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]*?>";
451.// //定义HTML标签的正则表达式
452.// String regEx_html = "<[^>]+>";
453.// //过滤script标签
454.// java.util.regex.Pattern p_script = java.util.regex.Pattern.compile(regEx_script, java.util.regex.Pattern.CASE_INSENSITIVE);
455.// java.util.regex.Matcher m_script = p_script.matcher(htmlStr);
456.// htmlStr = m_script.replaceAll("");
457.// //过滤style标签
458.// java.util.regex.Pattern p_style = java.util.regex.Pattern.compile(regEx_style, java.util.regex.Pattern.CASE_INSENSITIVE);
459.// java.util.regex.Matcher m_style = p_style.matcher(htmlStr);
460.// htmlStr = m_style.replaceAll("");
461.// //过滤html标签
462.// java.util.regex.Pattern p_html = java.util.regex.Pattern.compile(regEx_html, java.util.regex.Pattern.CASE_INSENSITIVE);
463.// java.util.regex.Matcher m_html = p_html.matcher(htmlStr);
464.// htmlStr = m_html.replaceAll("");
465.//
466.// textStr = htmlStr;
467.//
468.// } catch (Exception e) {
469.//
470.// }
471.//
472.// return textStr; //返回文本字符串
473.
474. }
475.
476. /**
477. * 返回字符串的len个字符.取前后,去掉中间 例如:输入"abcdefg",3 返回 "ab ... g".
478. * @param value String
479. * @param len int
480. * @return String
481. */
482. public static String getLmtStrx(String value, int len) {
483. if(value == null || value.length() <= len)
484. return value;
485. value = value.substring(0,len/2) + ".." + value.substring(value.length()-len/2);
486. return value;
487. }
488.
489. /**
490. * 给传入的字符串前补足'0',以使字符串长度为len。例如:输入字符串:"23",4 返回:"0023"。
491. * @param str String
492. * @param len int
493. * @return String
494. */
495. public String getZeroStr(String str, int len) {
496. int strlen = str.length();
497. for(int i = 0; i < len - strlen; i++) {
498. str = "0" + str;
499. }
500. return str;
501. }
502. /**
503. * 输入0000返回0001,输入00000001返回00000002
504. * @param rank String
505. * @return String
506. */
507. public static String createRank(String rank){
508. String prefix = null;
509. String suffix = null;
510.// System.out.println("rank"+rank);
511.// if(rank!=null&&rank.trim().endsWith("wf")){
512.// rank= rank.trim().substring(0,rank.length()-2);
513.// }
514. if (rank.trim().length() > 4) {
515. prefix = rank.substring(0, rank.length() - 4);
516. suffix = rank.substring(prefix.length());
517. long tmp = Long.parseLong(suffix);
518. tmp++;
519. int len = suffix.length();
520. suffix = new Long(tmp).toString();
521. len = len - suffix.length();
522. for (int n = 0; n < len; n++) {
523. suffix = "0" + suffix;
524. }
525. rank = prefix + suffix;
526. } else {
527. long tmp = Long.parseLong(rank);
528. tmp++;
529. int len = rank.length();
530. rank = new Long(tmp).toString();
531. len = len - rank.length();
532. for (int n = 0; n < len; n++) {
533. rank = "0" + rank;
534. }
535. }
536. return rank;
537. }
538. /**
539. * [ab][cd] - > ab;cd
540. * @param array String[]
541. * @return String
542. */
543. public static String getArrayAsString(String[] array){
544. String rs = "";
545. if(array != null){
546. for(int i =0;i < array.length;i ++){
547. rs += array[i] + ";";
548. }
549. }
550. if(rs.endsWith(";")){
551. rs = rs.substring(0,rs.length() - 1);
552. }
553. return rs;
554. }
555. /**
556. * 过滤HTML标签
557. * @param value String
558. * @return String
559. */
560. public static String filterScriptHtml(String value) {
561. if(value == null)
562. return "";
563. else {
564. value = value.replaceAll("<", "<");
565. value = value.replaceAll(">", ">");
566. }
567. return value;
568. }
569.
570. /**
571. * @param value double
572. * @param format String "0.00"
573. * @return String
574. */
575. public static String getFormatDouble(double value, String format) {
576. DecimalFormat d = new DecimalFormat(format);
577. return d.format(value);
578. }
579.
580. /**
581. * 0.34567 -> 0.35
582. * @param value double
583. * @return String
584. */
585. public static String getFormatDouble(double value) {
586. return getFormatDouble(value, "0.00");
587. }
588.
589. /**
590. * double数据类型取小数点位数
591. * @param doubleData double
592. * @param scale int
593. * @return String
594. */
595. public static String getDoubleByScale(double doubleData,int scale){
596. String strFormator = "#." + org.apache.commons.lang.StringUtils.repeat("#",scale);
597. java.text.DecimalFormat formater = new java.text.DecimalFormat(strFormator);
598. String newData = formater.format(doubleData);
599. return newData;
600. }
601.
602. /**
603. * 判断str是否在src String[]中
604. * @param src 源String[]
605. * @param str 要判断的String
606. * @return boolean
607. */
608. public static boolean isContain(String[] src, String str) {
609. if(null == src) {
610. return false;
611. }
612. for(int i = 0; i < src.length; i++) {
613. if(str.equalsIgnoreCase(src[i])) {
614. return true;
615. }
616. }
617. return false;
618. }
619.
620. /**
621. * 正则表达式判断(忽略大小写)
622. * @param target String
623. * @param regex String
624. * @return boolean
625. */
626. public static boolean isMatch(String target, String regex) {
627. PatternCompiler compiler = new Perl5Compiler();
628. Pattern pattern = null;
629. try {
630. pattern = compiler.compile(regex, Perl5Compiler.CASE_INSENSITIVE_MASK);
631. }
632. catch (Exception e) {
633. return false;
634. }
635. PatternMatcher patternMatcher = new Perl5Matcher();
636. return patternMatcher.matches(target, pattern);
637. }
638. /**
639. * 产生一个随机id,这个id以系统时间开头
640. * @return String
641. */
642. public static String createId() {
643. //System.out.println(System.currentTimeMillis());
644. String c = "" + getCount();
645. if (c.length() == 1) {
646. c = "0" + c;
647. }
648. String id = System.currentTimeMillis() + c;
649. int len = 32 - id.length();
650.
651. return id + org.apache.commons.lang.RandomStringUtils.randomAlphanumeric(len);
652. }
653.
654. private static int counter = 0;
655.
656. protected static int getCount() {
657. synchronized (StringUtils.class) {
658. if (counter < 0) {
659. counter = 0;
660.
661. }
662. counter++;
663. if (counter == 99) {
664. counter = 0;
665. }
666. return counter;
667. }
668. }
669.
670. public static void main(String[] args){
671. //String b[] = null;
672. ///System.out.print( getArrayAsString(b));
673. String a = org.trundle.common.FileUtils.read("C:\\Documents and Settings\\admin\\桌面\\aa.txt");
674.// String abc = " <SPAN lang=EN-US style=\"FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 宋体; mso-bidi-font-size: 9.0pt\">2003年12月4日<SPAN lang=EN-US style=\"FONT-SIZE:ze:中午 9.0pt\">";
675. System.out.print(getCleanString(a));
676.// String you你好 = "你好";
677.// System.out.println(you你好);
678.// abc = "AA&bb+CC&cc";
679.// String[] b = abc.split("\\+");
680.// System.out.println(b[0]);
681.
682. System.out.println(getFormatDouble(4.45,"0"));
683. System.out.println(createRank("00000005"));
684.
685. }
686.}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值