Date 字符串 正则表达式 网址

Date 字符串  正则表达式 网址

不可变字符串 :

分类:

不可变字符串:不是对象,String 字符串本身不能发生改变(地址),与指向字符串的引用无关

String s1="1000sjf";

可变字符串:StringBuilder/StringBuffer. 字符串本身可以发生变化,与指向字符串的引用无关

不可变字符串(string)的特点

1.常量一般放在常量区,

2.在堆区里面有一个特殊的存储空间(类似常量区),专门用来存字符串,

问题1:String str = new String(“abc”);内存如何?

常用方法:


public class Demo2 {

    public static void main(String[] args) {

        String s = "1000phone";

        //1.判断:

        //判断是否包含一个子字符串

        //boolean contains(CharSequence s) 

        System.out.println(s.contains("1000"));//true

        //判断两个字符串的内容是否相同

        //boolean equals(Object anObject) 

        System.out.println(s.equals("1000"));//false

        //忽略大小写判断两个字符串的内容是否相同

        //boolean equalsIgnoreCase(String anotherString) 

        System.out.println(s.equalsIgnoreCase("1000PHone"));//true

        //判断是否以某字符串开头

        //boolean startsWith(String prefix)

        System.out.println(s.startsWith("1000"));//true

        //判断是否以某字符串结尾

        //boolean endsWith(String suffix) 

        System.out.println(s.endsWith("phone"));//true

        

        

        //2.转换:将字符数组转换成字符串

        //1:使用构造方法

        //String(char[] value) 

        //String(char[] value, int offset, int count) 

        char[] arr = {'p','h','o','n','e'};

        String string1 = new String(arr);

        String string2 = new String(arr, 2, 3);

        System.out.println(string1+"     "+string2);

        //2:使用静态方法

        //static String copyValueOf(char[] data) 

        //static String copyValueOf(char[] data, int offset, int count) 

        //将字符串转成字符数组

        //char[] toCharArray() 

        char[] arr1 = s.toCharArray();

        System.out.println(arr1+" "+arr);

        //将字节数组转成字符串

        //String(byte[] bytes) 

        //String(byte[] bytes, int offset, int length)

        //String(byte[] bytes, String charsetName)//使用指定的编码将字节数组转换成字符成

        byte[] bytes = {97,98,99,100};

        String string3 = new String(bytes);

        System.out.println(string3);

        //将字符串转成字节数组

        //byte[] getBytes() 

        byte[] bytes1 = string3.getBytes();

        System.out.println(bytes1[0]);

        //将基本数据类型转换成字符串

        //String.valueOf()

        String string4 = String.valueOf(true);

        System.out.println(string4);

        

        

        //3.替换:

        //String replace(char oldChar, char newChar) 

        String string5 = s.replace("1000", "haha");

        System.out.println(string5+"    s:"+s);

        //子串:

        //String substring(int beginIndex)  

        //String substring(int beginIndex, int endIndex) //包含起始位置,不包含结束位置,到结束位置的前一位

        String string6 = "http://www.baidu.com:80/a/b/a/a?name=bing&age=18";

        String subString1 = string6.substring(7);

        String subString2 = string6.substring(7,20);

        System.out.println(subString2);

        //转换,去除空格,比较:

        //大小写转换

        //String toLowerCase()   转成小写

        //String toUpperCase()   转成大写

        //将字符串两端的空格去掉

        //只能取出两边的,中间的不能去

        //String trim() 

        String string7 = "    1000  phone     ";

        System.out.println(string7.trim()+"haha");

        //按字典顺序比较两个字符串

        /*

         * 字典顺序:按照ASCII表比较当前的两个字符,ASCII码大的认为是大的字符

         * 规则:从左边第一个字符开始比较

         * 如果当前的字符不相同,直接认为ASCII大的字符串是大字符串,后面的字符停止比较

         * 当前字符比较的具体规则:使用前面的字符-后面的字符,返回差值.如果是负数,说明前面的字符串小于后面的.反之前面的大.

         * 如果当前的字符相同,再去比较第二个字符,依次往后推,如果比到最后都相同,则认为两个字符串相等,差值返回0.

         */

        //int compareTo(String anotherString)

        int value = s.compareTo("1000PHone");

        System.out.println(value);

        

        //4.切割: String[] split(String)

        //被作为刀的子字符串不会再被作为内容.

        String string8 = "a,b,c,d,e,f";

        String[] strings = string8.split(",");

        for (int i = 0; i < strings.length; i++) {

            System.out.println(strings[i]);

        }

        String string9 = "1.0.0.0.p.h.o.n.e";

        String[] strings1 = string9.split("\\.");//默认.是任意字符的意思,\\.将它转义成普通的.

        for (int i = 0; i < strings1.length; i++) {

            System.out.println("strings1:"+strings1[i]);

        }

    }

}



可变字符串

StringBuffer:出现在jdk1.0,线程安全,考虑了线程安全问题

StringBuilder:出现在jdk1.5,是线程不安全的,没有考虑线程安全问题

注意:在不考虑线程安全问题时,尽量使用StringBuilder,因为速度快,效率高

方法


public class Demo3 {

    public static void main(String[] args) {

        StringBuffer sBuffer = new StringBuffer();

        //1.存储:

        //StringBuffer append(boolean b)   从最后插入

        sBuffer.append("1000");

        sBuffer.append("phone");

        System.out.println(sBuffer);

        //StringBuffer insert(int offset, boolean b)   从指定位置插入

        sBuffer.insert(4, true);

        System.out.println(sBuffer);

        //2.删除:

        //StringBuffer delete(int start, int end)   删除一部分字符串

        //StringBuffer deleteCharAt(int index)  删除一个字符

        System.out.println(sBuffer.delete(4, 8));

        //3.修改:

        //StringBuffer replace(int start, int end, String str)  替换指定的子字符串

        //void setCharAt(int index, char ch) 修改一个字符



        //4.获取:

        //char charAt(int index) 

        System.out.println(sBuffer.charAt(0));

        //返回指定子字符串的下标  从左到右

        //int indexOf(String str)

        System.out.println(sBuffer.indexOf("phone"));

        //int indexOf(String str, int fromIndex)

        System.out.println(sBuffer.indexOf("phone",7));

        //int lastIndexOf(String str) 

        //返回指定子字符串(从右边开始计数)在此字符串第一次出现时的索引

        //int lastIndexOf(String str, int fromIndex) 

        //返回指定子字符串(从右边开始计数,范围:当前指定的位置-0)在此字符串第一次出现时的索引 

        //int length() 

        //返回长度(字符数)。 

        System.out.println(sBuffer.length());

        //5.反转:

        //StringBuffer reverse()

        System.out.println(sBuffer.reverse());



补充:更新软件的作用

1.修补bug

2.增加功能

3.增加系统的安全性

网址(http://www.baidu.com:80/a/b/a/a?name=bing&age=18)

客户端(app 网页)和服务器(不是机器,是一个应用):通过网址交流

### 构成

协议://域名:端口号/资源路径?查询条件

1.协议:是指定一个统一的规范

http:超文本传输协议,实现的是一个网络间的通信的一个通信规则

https协议:安全的HTTP协议–可以

2.域名/ip:标记网络上的唯一一台主机

3.端口号:标记同一台主机上的某一个服务器([0,65536]—可以省,默认80)

拆分

Date

Date:日期类,java.util.包含年月日时分秒

Data:数据类,装的时二进制文件,java.sql.只包含年月日

格式

格式转换器:

Fromat():格式转化器(将日期格式化成日期/时间字符串);DateFormat:日期转换器

1.系统提供:DateFormat:(short long full default)

2.自定义格式:SimpleDateFormat

示例代码:

1.使用系统提供的默认的格式-DateFormat–提供了四种可选模式:short,long,full,default

//第一个参数用于指定日期格式   第二个参数用于指定时间格式

DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);

String stringDate =  dateFormat.format(new Date());

System.out.println(stringDate);

//1993-02-03 23:23:12     1993/02/03 23:23:12

2.使用自定义的日期格式转换器实现自由转换----SimpleDateFormat

SimpleDateFormat simpleDateFormat = new  SimpleDateFormat(“yyyy/MM/dd  HH:mm:ss”);//HH代表24小时制

String stringDate1 = simpleDateFormat.format(new Date());

System.out.println(stringDate1);

Calendar(日历类)

单个的年月日


public class Demo8 {

    public static void main(String[] args) {

        //日历类

        Calendar calendar = Calendar.getInstance();

        System.out.println(calendar);

        

        //获取当前的Date类型的时间

        Date date = calendar.getTime();

        System.out.println(date);

        

        //获取指定的值

        int value = calendar.get(Calendar.DATE);

        System.out.println(value);

        

        //获取属性的最大值,最小值

        int value1 = calendar.getMaximum(Calendar.YEAR);

        int value2 = calendar.getMinimum(Calendar.YEAR);

        System.out.println(value1+"    "+value2);

    }

}





访问权限

1. public:只能修饰类、方法(含构造方法)、成员。其修饰的部分所有人都能访问;

2. .默认修饰符(friendly):只能修饰类、方法(含构造方法)、成员变量。其修饰的部分只有同一包内的类能访问,对于这个包之外的所有类,这个成员是private的;

3. private:只能修饰方法(含构造方法)、成员变量。其修饰的部分只能在自身类中访问。例如将某类的构造方法设置为private,那么在其它类中就不能调用“new”来创建该类的实例,通常在该类中会对外提供一种方法,该方法能返回该类的实例;再例如我们经常将成员变量设置为private的,对外提供set/get方法对其进行访问,在set/get方法中可做一些比如权限检测等操作,而不是将域直接暴露给所有用户;

4. protected:只能修饰方法(含构造方法)、成员变量。

Arrays类:数组工具类,内部封装了大量的操作数组的方法


public class Demo9 {

    public static void main(String[] args) {

        //简单数据类型数组转字符串---方便我们对数组的内容进行查看

        int[] arr1 = {3,4,6,8,9};

        System.out.println(arr1);

        System.out.println(Arrays.toString(arr1));

        

        //数组转集合

        //简单数据类型数组转集合

        List list = Arrays.asList(arr1);

        System.out.println(list.size());//1  将整个简单数据类型的数组作为了集合的一个元素

        //引用数据类型数组转集合

        String[] strings = {"haha","hehe","hello"};

        List list2 = Arrays.asList(strings);

        System.out.println(list2.size());//3    //引用类型数组中的一个元素对应集合中的一个元素

        

        //注意点:

        //转过来的集合长度是固定,所以不能执行增加,删除.但是可以执行修改,更改,遍历

        //list2.add("java");

        list2.set(0, "BigData");

        System.out.println(list2);

        

        //二分查找

        int[] arr3 = {3,6,8,67,678};

        System.out.println(Arrays.binarySearch(arr3, 67));

    }

}



正则表达式


String qq = "8776545644";

//使用正则表达式

String regex = "[1-9]\\d{4,12}";

boolean istrue = qq.matches(regex);

System.out.println(istrue);

具体操作

匹配:

1.使用的是String类中的boolean matches(String regex)方法

2.示例代码:

tring s = “18910909090”;

String regex = “1[345789]\d{9}”;

boolean b = s.matches(regex);

System.out.println(b);

切割:

1.使用的是String类中的 String[] split(String regex)方法,依据正则表达式的字符串来切割

2.示例代码:

String s = “sdjof.srj.gojjg.ofoe.sjesd”;

String regex = “\.”;//.默认代表任意字符,要想使用.需要进行转义\.

String[] strings = s.split(regex);

for (String string : strings) {

System.out.println(“string:”+string);

}

替换:

1.使用的是String类中的 String replaceAll(String regex, String replacement),把字符串中符合正则表达式的内容替换成第二个参数的内容

2.示例代码:

String s = “sjfwfj4444sajose645sdgsjgrj3329889jsfjgowjsg888888888jsfjs”;

String regex = “\d{4,}”;

String place = “****”;

String newString = s.replaceAll(regex, place);

System.out.println(newString);

获取:

1.示例代码:要求:获取连续超过四个字母的子字符串

String s = “abc   hello   world       look    book    d    jwejfe”;

String regex = “[a-zA-Z]{5,}”;

//相当于将正则表达式进行了简单的转化,但是Pattern本身不具有获取数据的能力

Pattern pattern =  Pattern.compile(regex);

//具有获取数据的能力

Matcher matcher = pattern.matcher(s);

//matcher.find();//判断是否有符合当前表达式的内容

//matcher.group();//是获取内容

while (matcher.find()) {

String string = matcher.group();

System.out.println(string);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值