字符串相关类

来源:互联网 发布:八达岭老虎伤人知乎 编辑:程序博客网 时间:2024/06/15 21:32

JAVA运行期数据存放

内存分为四个区域,堆 栈 数据 段代码段
堆:new(对象)
栈:局部变量
数据段:类变量,常量
代码段:方法的定义

需特别注意

String s=new String (“abc”);
s 变量指向堆当中的字符串对象,但是在产生堆中的字符串对象之前,会先在常量区中,产生字符串常量对象(abc).然后以常量对象为模板,拷入堆中的字符串对象。如果常量区中有对应的字符串,就直接拷贝。

栈生命周期最短,方法结束空间释放,堆空间方对象,类结束,空间结束,数据段虚拟机关闭空间释放,代码的单独空间放置

equals 方法比较,如果是String 类型,比较的就是地址对应的内容,过个是引用类型,比较的就是地址是否相等
==比较的是地址,基本类型用==比较,因为数据和地址是一起的,所以可以用==直接比较内容

字符串的特性
字符串具有长度不可变化的特性,当对字符串进行添加,替换,删除时,不会改变字符串的内容,而是产生一个新的字符串

java.lang包String类常用方法

public class StringTest {      public static void main(String[] args) {            String s1="abc";            //得到指定下标的字符串            char c=s1.charAt(1);            System.out.println(c);            String s2="abc";            String s3="ABC";            //比较两个字符串是否相等,忽略大小写            System.out.println(s2.equalsIgnoreCase(s3));            //比较两个字符串是否相等,区分大小写            System.out.println(s2.equals(s3));            String s4="abcde";            //得到指定字符串第一次出现在s4字符串的下标,如果s4中不包含该字符串,返回-1            int index=s4.indexOf("bc");            //得到指定字符串最后一次出现在s4字符串的下标,如果s4中不包含该字符串,返回-1            int last=s4.lastIndexOf("c");            System.out.println(index+"   "+last);            //得到字符串长度            int len=s4.length();            System.out.println(len);            //替换指定字符串            String s5="abdsafdsa";            String rep=s5.replace("a", "$");            System.out.println(rep);            String s6="acabdsafg";            //下标3开始,截取字符串            String sub=s6.substring(3);            //下标3开始,5结束,截取字符串,包含开始3,不包含结束5            String sub1=s6.substring(3, 5);            System.out.println(sub+"  "+sub1);            String s7="   ab cd ef    ";            //去掉两头空格            s7=s7.trim();            System.out.println(s7+"*");      }}

编写一个程序,解析字符串,然后写入资源文件

import java.io.FileWriter;import java.io.IOException;import java.util.Properties;public class Test2 {      public static void main(String[] args) {            String str="http://localhost:8088/abc?name=john&sex=男";            //获取问号下标            int num=str.indexOf("?");            //获取等号下标            int num2=str.indexOf("=");            //截取问号之后等号之前的数据            String nameStr=str.substring(num+1,num2);            //截取&之前,等号之后数据            int num3=str.indexOf("&");            String userName=str.substring(num2+1,num3);            //去掉&之前字符串            String newStr=str.substring(num3);            //获取性别            int num4=newStr.indexOf("=");            String sexStr=newStr.substring(1, num4);            //获取性别            String userSex=newStr.substring(num4+1);            //添加进资源文件            Properties pro=new Properties();            pro.setProperty(nameStr, userName);            pro.setProperty(sexStr, userSex);            try {                  pro.store(new FileWriter("String.txt"),null);            } catch (IOException e) {                  // TODO Auto-generated catch block                  e.printStackTrace();            }      }}
正则表达式指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。正则表达式的构造要求    1. [ ]:表示[ ]中描述的任意字符    2. {3,20}:表示前一个规则最少出现3次,最多出现20次    3. {3, }:表示最少出现3次,没有上限    4. {3}:表示只能出现3次,不能多,不能少    5. |:表示或者    6. *:等价于{0,},可以出现,可以不出现,如果出现,没有上限    7. +:等价于{1,},至少出现异常,没有上限限制    8. ?:等价于{0,1},可以出现,可以不出现,如果出现最多一次    9. .:表示任意字符    10. \d:等价于[0-9],表示数字    11. \s:表示空格或回车    12. \w:等价于[a-zA-Z0-9_ ],表示合法标识符    13. 匹配中文 \u4e00-\\u9fa5  两个斜杠  例如 \\w    \\d
import javax.swing.JOptionPane;public class EmailTest {     //匹配邮箱格式是否合法      public static void main(String[] args) {            String EmailStr = JOptionPane.showInputDialog(null, "请输入邮箱号");            // 设定正则表达式匹配的字符串的格式            String rex = "[a-zA-Z0-9]{3,20}[@][A-Za-z0-9]{2,9}[.](com|cn|net)";            if (EmailStr.matches(rex)) {                  JOptionPane.showMessageDialog(null, "合法");            } else {                  JOptionPane.showMessageDialog(null, "非法");            }      }}

实际应用 添加信息匹配

import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JFrame;import javax.swing.JOptionPane;public class StudnetFrame extends JFrame{      private Text nameTxt=new Text("姓名", 50, 50, this);      private Text ageTxt=new Text("年龄", 50, 100, this);      private Text sexTxt=new Text("性别", 50, 150, this);      public StudnetFrame(){            this.setLayout(null);            Button addButton=new Button("添加", 100, 200, this);            addButton.addActionListener(new ActionListener() {                  @Override                  public void actionPerformed(ActionEvent e) {                        String info="";                        if(nameTxt.getText().matches("[a-zA-Z\\u4e00-\\u9fa5]{2,}")==false){                              info+="姓名必须是2位以上的字母或汉字\n";                        }                        if(ageTxt.getText().matches("\\d{1,3}")==false){                              info+="年龄必须是数字\n";                        }                        if(sexTxt.getText().matches("(男|女)")==false){                              info+="性别必须是男或女\n";                        }                        if(info.length()!=0){                              JOptionPane.showMessageDialog(null, info);                              return;                        }                        JOptionPane.showMessageDialog(null, "执行业务");                  }            });            this.setSize(500,400);            this.setVisible(true);            this.setDefaultCloseOperation(3);            this.setLocationRelativeTo(null);      }      public static void main(String[] args) {            StudnetFrame s=new StudnetFrame();      }}

StringBuffer类
StringBuffer是缓存区的对象,当对StringBuffer做添加,替换,删除时,直接改变StringBuffer的内容,不会产生新对象
如果需要对字符串做频繁操作时,一般先转换为为StringBuffer,操作完成后再通过toString()转换为字符串

StringBuffer类常用方法

import javax.swing.JOptionPane;public class Test {      public static void main(String[] args) {            StringBuffer sb=new StringBuffer("123456");            //追加            sb.append("s");            System.out.println(sb);            //插入 (插入的位置下标,插入的内容)            sb.insert(4, "********");            System.out.println(sb);            //删除(删除起始位置,结束位置)            sb.delete(1, 2);            System.out.println(sb);            // 将字符串倒序输出 比如:输入”abcde”   那么,输出 “edcba”            String str=JOptionPane.showInputDialog(null,"请输入一个数组");            StringBuffer str1=new StringBuffer(str);            //reverse()方法为反转输出,在StringBuffer中第一个方法            str=str1.reverse().toString();            System.out.println(str);      }}
0 0