JAVA基础笔记——String

来源:互联网 发布:qq飞车网络不稳定 编辑:程序博客网 时间:2024/05/19 10:36

String:用于描述字符串
特点:是被final修饰的,一旦被初始化不能被改变

String s1 =”abc”;
String s2 = new String(“abc”);
区别:s1在内存中只有一个对象,s2在内存中有两个对象

常用方法:

比较:
equals():String复写了此方法,用来比较字符串是否相同
equalsIgnoreCase(str):忽略大小写比较
compareTo():按照子典比较两个字符串

获取:
char charAt(int dex):获取摸个位置的字符
indexOf(int ch):返回ch在字符串第一次出现的位置,也可以判断是否包含
indexOf(String str):返回str.
startsWith(String str),endsWith(str):字符串以..开头、结尾
contains(str):判断是否包含子串

转换:
将字符串<—->字符数组
char[] tocharArry():
new String(char[])
将字符串<—->字节数组(可指定编码表)
byte[] getBytes();
new String(byte[])
其他类型<—->字符串
copyValueOf(char[] c)
valueOf(…):

替换:
repalce(char,char);
repalce(str,str);

切割:
Split();
subString(int ):从指定位置到结尾
subString(int,int):包含头不包含结尾

转换大小写:
toUpperCase(),toLowerCase()

StringBuffer:字符串缓冲区,是一个容器
长度是可以变化的,
可以操作多个数据类型,
最终通过toString()变成字符串

常用方法:

1.增:
Append():将指定的数据加入到数据结尾处
Insert(index,str):将数据插入到指定的位置

2.删:
Delete(start,end):删除缓冲区的数据,包含头不包含尾

3.查:
charAt():
indexOf(str)
String subString(start,end)

4.改:
StringBuffer replace(start,end,str):
setCharAt(int,char)
5.反转:
StringBuffer reverse();

(JDK1.5以后)StringBuilder:一个可变的字符序列,但不保证同步,一般用于单线程,效率更高。

StringBuffer与StringBuilder:

StringBuffer:线程同步,(由于多线程时要判断锁),效率低
StringBuilder:线程不同步,多线程会带来安全问题,效率高。建议使用StringBuilder

进制转换:

十进制转换为其他进制:
toBinaryString
toHexString
toOctalString

其他进制转换为十进制:
parseInt(String s, int radix)

自动装箱拆箱:

Integer m = 137;
Integer n = 137;
Syso(m==n); //false

Integer m = 127;
Integer n = 127;
Syso(m==n); //true

原因:当数值处于byte的范围时,对于新特性,如果该数值已经存在,则不会再开辟空间

几个小练习:

1.去除字符串两端的空格:trim()

public class TrimString {    /** 练习:去除字符串两端的空格     *思路:     *1.定义两个变量,依次递增递减     *2.判断相应位置的字符     *3.返回子串     *     **/    public static void main(String[] args) {        String str = "       ";        System.out.println(trim(str));    }    public static String trim(String str) {        int start = 0;        int end = str.length()-1;            while(start<end&&str.charAt(start)==' ') {                start++;            }            while(start<end&&str.charAt(end)==' ') {                end--;            }        return str.substring(start, end+1);    }}

2.统计一个字符串str1在另外一个字符串str2出现的次数

public class StringCount {    /*统计一个字符串str1在另外一个字符串str2出现的次数     * 思路:     * 1.定义一个变量,通过indexOf(),索引相应字符串str1在str2中出现的位置     * 2.变量自增str1的长度     * 3.循环终止条件,indexOf()返回-1     *      * */    public static void main(String[] args) {        // TODO Auto-generated method stub        stringCount("kk","kkkkgfkkkk");    }    public static void stringCount(String kk,String str) {        int count = 0;        int i = 0;        while((i=str.indexOf(kk,i))!=-1) {            i = i + kk.length();            count++;        }        System.out.println(count);    }}

3.求出两个字符串的最大子串

public class MaxSubString {    /**  求两个字符串的最大子串     * 思路:     * 1.将长度较短的字符串按照长度递减的方式获取到     * 2.判断取到的字符串是否包含在大子串中     * 3.如果包含,返回子串     */    public static void main(String[] args) {        // TODO Auto-generated method stub        String str = "sdfajjhellohjhfjgh";        String str1 = "dhgfhdfelsdgsdfghgflohgf";        System.out.println("最大子串为:"+getMaxSubString(str,str1));    }    public static String getMaxSubString(String str,String str1) {        /*判断连个字符串的长度,取到短的字符串,         * 对短的字符串进行操作,这样可以减少遍历次数,         * 可以提高效率        */        String max = "";        String min = "";        max = str.length()>str1.length()?str:str1;        min = max==str?str1:str;        //按字符串长度进行遍历        for(int i=0;i<min.length()-1;i++) {            //每次循环end减少1,循环i次减少i            for(int start=0,end=min.length()-i;start<end&&end!=min.length();start++,end++) {                //判断包含,可以替换为if(max.indexOf(min.substring(start,end))!=-1)                if(max.contains(min.substring(start, end)))                    return min.substring(start, end);            }        }        return null;    }}
0 0
原创粉丝点击