java基础—3.String类与正则表达式
2015-09-07 17:56
891 查看
一、概述及理解
java.lang.String是处理字符串的类。字符串是java编程中经常处理的对象。
二、常见功能
常见功能有CRUD,即:
|--1.获取
1.1 获取字符串的长度 int length() 1.2 返回指定索引处的 char 值 char charAt(int index) 1.3 根据字符获取字符在字符串中的位置 int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引 int indexOf(int ch, int fromIndex) 返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索 int indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引 int indexOf(String str, int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始 1.4 获取字符串中的一部分 String subString(begin , end) 包含头,但是不包含尾
|--2.判断
2.1 字符串中是否包含某一个子串 boolean contains(str) str.indexOf("aa")!=-1 2.2 字符中是否有内容 boolean isEmpty(); 2.3 字符串是否是以指定内容开头 boolean startsWith(str) 2.4 字符串是否是经指定内容结尾 boolean endsWith(str)
|--3.转换
3.1 将数组转成字符串 构造函数 :String ( char[] ) String ( char[],offset ,count) String( byte[]) String( byte[] , offset ,count ) 静态方法: static String copyValueOf( char [] ch); static String copyValueOf( char[] data ,int offset , int count ) static String valueOf( char[] ) 3.2 将字符串转成数组 char[] toCharArray() byte[] getByte() 3.3 将基本数据类型转成字符串 static String valueOf( int ) static String valueOf(double) 3+"" 等效于 String.ValueOf( 3 ) 3.4 将字符串转成大写或小写 String toUpperCase() String toLowerCase()
|--4.切割 String[] split(String regex) |--5.替换 String replace(oldChar , newChar ) String replace(CharSequence target, CharSequence replacement) String trim() 去除字符串两端的空格 |--6.比较 int comparaTo( String )
三、StringBuffer/StringBuilder
StringBuffer/StringBuilder都是一个容器,相较于数组,1.可以操作多个数据类型,2.这两个容器的长度都是可变的,所以对内存更加友好,程序运行的效率更高。3.最终会通过toString()方法转成字符串, StringBuffer是线程同步的,StringBuilder线程不同步,StringBuilder效率高些。作为一个容器,类比数据库常见功能有CRUD,即: Create—创建 Read—读取 Update—修改 Delete—删除
|--1. 存储 StringBuffer append(数据) 数据可以是基本的常用类型 StringBuffer inser(插入的位置 , 数据) |--2. 删除 StringBuffer delete( start , end ) 包含头,不包含尾 StringBuffer deleteCharAt( index ) 删除指定位置的字符 |--3. 获取 char charAt( index ) int indexOf( String str ) int lastIndexOf(String str) int length() String subString( start ,end ) void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)取一char数组 StringBuffer reverse(); 反转 |--4. 修改 StringBuffer replace(start , end , string ) 指定开关及结尾替换成指定字符 void setCharAt(index , char ch) 指定位置替换成指定字符
四、正则表达式
正则表达式是符合一定规则的表达式,是用于专门操作字符串的。用一些特定的符号来表示代码操作。正则表达式可以简化对字符串的操作。正则表达式有一个缺点是阅读性差。 操作步骤: 1.将正则表达式封装成对象; Pattern p = Pattern.compile(reg); 2.让正则对象和要操作的字符串相关联; Matcher m =p.matcher(str); 3.关联后,获取正则匹配引擎; 4.通过引擎对符合规则的子串进行操作:
while(m.find()){ System.out.print(m.group()+"\t"); System.out.println(m.start()+"…………"+m.end()); }其实String类中使用正则表达式的方法,底层调用的都是正则表达式中的Pattern类和Matcher类
|--1.匹配:String类中matchs()方法:boolean mathchs() String qq = "123455"; String regex = "[1-9]\\d{4,14}"; boolean flag = qq.mathchs(regex); |--2.切割:String类中的String[] split(String regex) String str = "ab bdd sdfsd yeyt" String regex ="\\b[a-z]+\\b" String[] st = str.split(regex); |--3.替换:String类中的String replaceAll(String regex , String replacement) String str = "abdfsddfsdfdfsdffaaa"; String regex = "([a-z])\\1+"; String st = str.replaceAll(regex); |--4.获取:将字符串中的符合规则的子串取出
package stringTest; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 1.针对"ming t 4000 ian jiu yao fang jia le,haha.",找出连续仅包含4个字符的字符串 * 2.打印符合条件字符串的位置 * */ public class RegexTest { public static void main(String[] args) { String str = "ming tian jiu yao fang jia le,haha."; String reg = "\\b[a-z]{4}\\b"; //将规则封装成对象 Pattern p = Pattern.compile(reg); //让正则对象和要作用的字符串相关联,获取匹配器对象Matcher Matcher m =p.matcher(str); //打印处理前的字符串 System.out.println(str); while(m.find()){ //打印符合规则的字符串 System.out.print(m.group()+"\t"); //打印符合规则字符串的开关和结尾 System.out.println(m.start()+"…………"+m.end()); } } }结果如下:
五、正则表达式的练习
package stringTest; /** *题目: *1.模拟一个trim方法,去除字符串两端的空格 *2.将一个字符串进行反转。将字符串中指定部分进行反转,"abcdefg","abfedcg"; *3.获取一个字符串在另一个字符串中出现的次数 *4.获取两个字符串中最大相同子串。 * abcwerthelloyuiodef * cvhelloobnm */ public class StringFunDemo { public static void main(String[] args) { System.out.println(myTrim(" abc bc ")); System.out.println(reverseString("abcd yeyt abcd ",5,8)); System.out.println(stringCount("I miss you,just you miss me","ss")); System.out.println(getMaxSubString("fyeyt","kjk yeyt j")); } //练习一,去除字符串两端的空格 public static String myTrim(String str){ if(str==null) return null; int start=0,end=str.length()-1; //开头空字符检测 while(start<=end && str.charAt(start)==' '){ start++; } //结尾空字符检测 while(start<=end && str.charAt(end)==' '){ end--; } return str.substring(start, end+1); } //练习二:将一个字符串指定部分进行反转 public static String reverseString(String str,int start,int end){ char[] ch = str.toCharArray(); char c;//中间变量 //对要求反转的部分反转 for(;start<end;start++,end--){ c = ch[start]; ch[start]=ch[end]; ch[end]=c; } //排好序的数组构造新字符串,返回结果 return new String(ch); } //练习三:获取一个字符串在另一个字符串中出现的次数 public static int stringCount(String str,String key){ int count=0,index =0; //每次查找后,都把查找点增加 while((index = str.indexOf(key, index))!=-1){ index = index + key.length(); count++; } return count; } //练习四:获取两个字符串中最大相同子串 public static String getMaxSubString(String s1,String s2){ String min,max; String maxStr; if(s1.length()>=s2.length()){ min=s2; max=s1; } else{ min = s1; max = s2; } //遍历较短的字符串,所有组合从长到短与s1比较,如果包含则返回 for(int x=0;x<min.length();x++){ for(int y=0;y<=x;y++){ maxStr =min.substring(y, min.length()-x+y); if(max.contains(maxStr)){ return maxStr ; } } } return null; } }运算结果:
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统