Java中利用String类进行文本处理
来源:互联网 发布:putty远程复制windows 编辑:程序博客网 时间:2024/06/05 05:44
最近对文本字符串处理比较多,现总结下String处理字符串的方法,以及Java是如何利用String类的方法进行文本处理的。
1、读取文本内容到字符串。
StringBuffer codeBuffer = new StringBuffer();//存放文本内容的文件地址String filePath = "xxxx";//打开文件BufferedReader conFile = null;try {conFile = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "gbk"));} catch (FileNotFoundException e) {throw new RuntimeException("未发现此文件位置");}String hasread = null;while((hasread = conFile.readLine()) != null) {codeBuffer.append(hasread);}conFile.close();String code = codeBuffer.toString();
2、replaceAll(String regex,String replacement)方法,将符合正则表达式regex的字符串均用replacement替换。例如处理文本时,因为空格符的随意性,有时候会对文本字符串处理带来困难。此时,就可以将多个空格转化为一个空格,方便处理:
//replaceAll的第一个参数为正则表达式,\s表示:匹配任何不可见字符,包括空格、制表符、换页符等等str=str.replaceAll("\\s+"," ");3、split(String regex)方法。split方法根据正则表达式regex分隔目标字符串。处理文本时,可以先将文本字符串中多个空格替换为单个空格,之后对文本字符串进行split(" "),得到字符串数组。文本字符串转化为字符串数组后,好处是可以对文本中的词组进行准确定位。
//split方法的参数为正则表达式。对于split方法注意一下几点:如果用“.”作为分隔的话,必须是String.split("\\.");如果用“|”作为分隔的话,必须是String.split("\\|");因为"."和"|"是转义字符,必须加"\\"String strArray = str.split(" ");
举例:利用字符串处理SQL语句。输出SQL中用到的表
package com.xtli.controller.String;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;/* * String处理SQL语句 by xtli */public class getTableInSQL { public static void main(String[] args) throws IOException { StringBuffer SQLBuffer = new StringBuffer(); String filePath = "D:\\SQL.txt"; //打开文件 BufferedReader SQLFile = null; try { SQLFile = new BufferedReader(new InputStreamReader( new FileInputStream(filePath), "utf8")); } catch (FileNotFoundException e) { throw new RuntimeException("未发现此文件位置"); } String hasread = null; while((hasread = SQLFile.readLine()) != null) { SQLBuffer.append(hasread); } SQLFile.close(); String SQL = SQLBuffer.toString(); List<String> tableList = new ArrayList<String>(); //替换多个空格 SQL=SQL.replaceAll("\\s+"," "); String[] SQLArr = SQL.split(" "); for(int i = 1; i < SQLArr.length; i++) { String tableStr = SQLArr[i-1]; if("FROM".equals(tableStr.toUpperCase()) || "JOIN".equals(tableStr.toUpperCase())) { tableList.add(SQLArr[i]); } } for(String table: tableList) { System.out.println(table); } }}SQL.txt内容为:
select * from tableA aleft join tableB bon a.id = b.aidleft join tableC con b.id = c.bid输出以下结果:
tableAtableBtableC
4、substring()方法。String提供了两个substring重载方法。
//删除str中位置从startIndex到endIndex的字符串,返回删除后的新串public static String deleteStr(int startIndex, int endIndex, String str) { String deletedStrBefore = str.substring(0, startIndex); String deleteStrAfter = str.substring(endIndex+1, str.length()); return deletedStrBefore + deleteStrAfter; }
5、indexOf方法。
String提供了四个indexOf重载方法,如下。
/** 返回第一次引号和第二次引号之间的内容*/public static void main(String[] args) { String str = "小明说,\"我放学回家了。\""; //1 双引号第一次出现的位置 int leftQuota = str.indexOf("\""); //2 双引号第二次出现的位置,与第一次引号匹配 int rightQuota = str.indexOf("\"", leftQuota + 1); String talkContext = str.substring(leftQuota + 1, rightQuota); System.out.println(talkContext);}执行结果
我放学回家了。除了indexOf方法外,String还提供了lastIndexOf方法,同样有四个重载方法
/** 返回第一次引号和第二次引号之间的内容*/public static void main(String[] args) { String str = "小明说,\"我放学回家了。\""; int rightQuota = str.lastIndexOf("\""); int leftQuota = str.lastIndexOf("\"", rightQuota-1); String talkContext = str.substring(leftQuota + 1,rightQuota); System.out.println(talkContext);}返回和上例同样的结果。
6、charAt(int index)方法,返回指定index位置的字符值,用于判断指定位置的字符。startsWith(String prefix) 方法,判断目标字符串是否以prefix为前缀,用于字符串前缀判断。
未完待续。。。
7、利用栈,获取指定一对字符之间的文本。栈是一种先进后出的线性存储结构,Java提供了Stack类描述此种数据结构。有时候处理文本时,可能需要获取某对字符之间的内容,就可以利用Stack来处理。
举例:如果现在要求得到如下方法中的代码,该怎么做呢?
public static void main(String[] args) { try { String str = "小明说,\"我放学回家了。\""; int rightQuota = str.lastIndexOf("\""); int leftQuota = str.lastIndexOf("\"", rightQuota - 1); String talkContext = str.substring(leftQuota + 1,rightQuota); System.out.println(talkContext); } catch(Exception e) { System.out.println("异常啦"); } }
通过分析此段代码,发现只要获取第一个“{”和最后一个“}”中的文本即可,因为代码中的“{”和“}”均是成对出现的,所以我们用栈来解决此问题。代码如下:
import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;import java.util.Stack;/* * 获取"{"和"}"之间的文本 by xtli */public class StackTest { public static void main(String[] args) throws IOException { StringBuffer codeBuffer = new StringBuffer(); String filePath = "D:\\javaCode.txt";//此文件存放代码内容 //打开文件 BufferedReader conFile = null; try { conFile = new BufferedReader(new InputStreamReader( new FileInputStream(filePath), "gbk")); } catch (FileNotFoundException e) { throw new RuntimeException("未发现此文件位置"); } String hasread = null; while((hasread = conFile.readLine()) != null) { codeBuffer.append(hasread); } conFile.close(); String code = codeBuffer.toString(); System.out.println(getMethodStr(code)); } /* * 获取给定字符串中第一对‘{’中的内容 */ public static String getMethodStr(String contextMethStr){ //获取第一个'{'的位置 int firstLeftBracket = contextMethStr.indexOf('{'); // 获取和第一个‘{’匹配的‘}’的位置 int firstRightBracket = getMarriedRightBracket(contextMethStr, firstLeftBracket); // 截取"{"与"}"之间的字符串,并根据","生成字符串数组 if (firstRightBracket == -1 || firstRightBracket <= firstLeftBracket) { return null; } return contextMethStr.substring(firstLeftBracket+1, firstRightBracket); } /* * 获取str中,和"{"位置匹配的第一个“}” */ public static int getMarriedRightBracket(String str, int leftBracket) { int rightBrackerIndex= -1; if('{' != str.charAt(leftBracket)) {//leftBracket的位置不是“{” return -1; } //存储"{""}"的栈 Stack<Character> bracketStack = new Stack<Character>(); // 1 将第一个"{"推入栈中 bracketStack.push(str.charAt(leftBracket)); char[] strChar = str.toCharArray(); // 2 循环判断strChar,如果是"{"则入栈,如果是"}"则出栈,当栈空时,证明已找到匹配的"}" for(int i = leftBracket + 1; i < strChar.length; i++) { if('{' == str.charAt(i)) { bracketStack.push(str.charAt(i)); } if('}' == str.charAt(i)) { bracketStack.pop(); if (bracketStack.isEmpty()) { rightBrackerIndex = i; break; } } } // 3 栈空,则说明找到与"{"配对的"}",否则未找到 if (bracketStack.isEmpty()) { return rightBrackerIndex; } else { return -1; } }}
执行后,返回如下结果
try { String str = "小明说,\"我放学回家了。\""; int rightQuota = str.lastIndexOf("\""); int leftQuota = str.lastIndexOf("\"", rightQuota - 1); String talkContext = str.substring(leftQuota + 1,rightQuota); System.out.println(talkContext); } catch(Exception e) { System.out.println("异常啦"); }
阅读全文
1 0
- Java中利用String类进行文本处理
- java 中利用Matcher类提供的函数进行文本替换
- 利用boost库进行字符串与文本处理
- OpenCV3中利用VideoCapture类进行视频的处理
- awk进行文本处理
- 利用java将已设置好的文本进行修改
- linux中awk进行日志文本的处理过滤
- Java中两个String数组进行比较
- Java中利用Socket进行通信
- 利用LDA进行文本聚类(hadoop, mahout)
- C#文本处理(String)
- python 读取文本进行处理
- 一段能用的OpenCV3中利用VideoCapture类进行视频的处理
- android中利用LruCache对图片进行缓存处理
- java利用qrcode.jar进行处理二维码,生成、解析二维码
- 利用Java 8 Optional 来进行null处理
- Java中常用String处理函数集合
- java中String处理函数split
- Java后台框架篇--Struts2.0简单使用
- 常见算法基础题思路简析(一)-排序篇
- 用折半查找法在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.
- 1026. 程序运行时间(15)
- Yii2.0 js函数未定义
- Java中利用String类进行文本处理
- cygwin里面设置vi格式
- 总结
- 笔记本VMware下安装ubuntu 16.04窗口显示不全的问题
- 创建动态链接库
- VMware Workstation 14永久激活密钥
- Power-of-four-----LeetCode上发现的一道很搞笑并且有意思的简单题!!
- [Usaco2008 Feb]Eating Together麻烦的聚餐
- Java后台框架篇--Struts2.0之总结