java基础—3.String类与正则表达式

来源:互联网 发布:网络对讲系统 编辑:程序博客网 时间:2024/06/07 04:51


一、概述及理解

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")!=-12.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 tian 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);//让正则对象和要作用的字符串相关联,获取匹配器对象MatcherMatcher 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;}}
运算结果:

                                             
0 0