Java字符串String相关

1. char charAt(int index) 返回给定位置的字符

package string;

/**
 * char charAt(int index)
 * 返回给定位置的字符
 */
public class CharAtDemo {
    public static void main(String[] args) {
        //            0123456789
        String str = "helloWorld";
        char str1 = str.charAt(5);
        System.out.println("返回给定位置的字符为:"+str1);

        String line = "上海自来水来自海上";
        System.out.println("字符串一半的长度:line.length()/2 = "+line.length()/2);
        for(int i = 0; i < line.length()/2; i++){
            char c1 = line.charAt(i);
            char c2 = line.charAt(line.length()-1-i);
            if(c1 != c2){
                System.out.println("不相等的字:c1 = "+c1+", c2 = "+c2);
                System.out.print("不");
                break;
            }
        }
        System.out.println("是回文!");
    }
}

2. int indexOf(String str) 返回给定字符串的位置

package string;

/**
 * int indexOf(String str)
 * 返回给定字符串在当前字符串中的位置,如果当前字符串不包含给定内容则返回值为-1
 */
public class IndexOfDemo {
    public static void main(String[] args) {
        //            0123456789012345
        String str = "thinking in java";
        int index = str.indexOf("in");
        System.out.println(index);//2
        //从指定位置开始检索第一次出现给定字符的位置
        index = str.indexOf("in",3);
        System.out.println(index);//5
        //最后一次出现给定字符的位置
        index = str.lastIndexOf("in");
        System.out.println(index);//9
    }
}

3. int length() 返回字符串长度

package string;

/**
 * int length()
 * 返回当前字符串的长度(字符个数)
 */
public class LengthDemo {
    public static void main(String[] args) {
        String str = "你好java!";
        System.out.println("length:"+str.length());
        String stoveNo = "1234567";
        System.out.println("字符串炉号长度为:"+stoveNo.length());
        int index = 0;
        char c = stoveNo.charAt(index);
        System.out.println("下标为 "+index+" 的字符是:"+c);
    }
}

4. boolean matches(String regex) 正则验证字符串格式

package string;

/**
 * String支持正则表达式的方法之一:
 * boolean matches(String regex)
 * 使用给定的正则表达式验证当前字符串是否符合格式要求
 * 注意!给定的正则表达式就算不加边界匹配符也是做全匹配验证的
 */
public class MatchesDemo {
    public static void main(String[] args) {
        /*
            邮箱的正则表达式:
            [a-zA-Z0-9_]+@[a-zA-Z0-9]+(\.[a-zA-Z]+)+
         */
        String email = "fan_cq@tedu.cn";
        String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
        boolean match = email.matches(regex);
        if(match){
            System.out.println("是邮箱");
        }else{
            System.out.println("不是邮箱");
        }
    }
}

5. String[] split(String regex) 正则拆分字符串,以数组形式返回

package string;

import java.util.Arrays;

/**
 * String支持正则表达式的方法之二:
 * String[] split(String regex)
 * 将当前字符串按照满足正则表达式的部分进行拆分,将拆分后的每部分以数组形式返回。
 */
public class SplitDemo {
    public static void main(String[] args) {
//        String str = "abc123def456ghi";
//        String[] arr = str.split("[0-9]+");
        /*
            如果连续出现可拆分项,则中间会拆分出一个空字符串。如果字符串在开始就是可拆分项
            则首先会拆分出一个空字符串。
            注意,如果在字符串末尾连续匹配到可拆分项,所有拆分出的空字符串都会被忽略。
         */
        String str = "..abc.def.ghi........";
        String[] arr = str.split("\\.");
        System.out.println(arr.length);
        System.out.println(Arrays.toString(arr));
    }
}

6. String replaceAll(String regex, String replacement)正则替换为给定内容

package string;

/**
 * String支持正则表达式的方法之三:
 * String replaceAll(String regex,String str)
 * 将当前字符串中满足正则表达式的部分替换为给定内容
 */
public class ReplaceAllDemo {
    public static void main(String[] args) {
        String str = "abc123def456ghi";
        //将数字部分换成"#NUMBER#"
        str = str.replaceAll("[0-9]+","#NUMBER#");
        System.out.println(str);


        String regex = "(wqnmlgb|dsb|wrsndm|nc|cnm|mdzz|nmsl|djb)";
        String message = "wrsndm!你个dsb,你怎么这么nc,你就一个djb!";
        message = message.replaceAll(regex,"***");
        System.out.println(message);
    }
}

7. boolean startsWith(String prefix)是否以给定的内容开始或结束

package string;

/**
 * boolean startsWith(String str)
 * boolean endsWith(String str)
 * 判断当前字符串是否是以给定的内容开始或结束的
 */
public class StartsWithDemo {
    public static void main(String[] args) {
        String str = "www.tedu.cn";

        boolean start = str.startsWith("www.");
        System.out.println("startsWith:"+start);

        boolean ends = str.endsWith(".cn");
        System.out.println("endsWith:"+ends);
    }
}

8. toUpperCase() 和 toLowerCase()转换为全小写或全大写

package string;

/**
 * String toLowerCase()
 * String toUpperCase()
 * 将当前字符串中的英文部分转换为全小写或全大写
 */
public class ToUpperCaseDemo {
    public static void main(String[] args) {
        String str = "我爱Java!!";
        System.out.println(str);

        String upper = str.toUpperCase();
        System.out.println(upper);

        String lower = str.toLowerCase();
        System.out.println(lower);
    }
}

9. String常量池

package string;

/**
 *  String常量池
 *  常量池是虚拟机在堆内存中开辟的一段空间,用来缓存所有使用字符串字面量形式创建的字符串对象.
 *  当再次使用相同字面量创建字符串时,会重用对象,以减少对内存开销
 */
public class StringDemo {
    public static void main(String[] args) {
        String s1 = "123abc";
        String s2 = "123abc";
        System.out.println(s1==s2);//true

        String s3 = "123abc";
        System.out.println(s2==s3);//true

        s1 = s1 + "!";//修改内容会创建新对象
        System.out.println("s1: "+s1);//123abc!
        System.out.println("s2: "+s2);//123abc
        System.out.println(s1==s2);//false
        System.out.println(s2==s3);//true

        //new一定会创建新字符串对象,java不建议这样创建字符串,因为不会重用对象
        String s4 = new String("123abc");
        System.out.println("s4: "+s4);
        System.out.println(s2==s4);//false
        //字符串比较内容都要使用equals方法,几乎不会用到"=="
        System.out.println(s2.equals(s4));//true
        /*
            这里触发了编译器的一个特性:编译器在编译期间如果能确定一个计算表达式的结果时就会进行
            计算并将结果编译到 class文件中.
            下面的代码会被编译期改为:
            String s5 = "123abc";
         */
        String s5 = "123"+"abc";
        System.out.println("s5:"+s5);
        System.out.println(s2==s5);//true

        String s = "123";
        String s6 = s +"abc";
        System.out.println("s6:"+s6);
        System.out.println(s2==s6);//false
    }
}

10. String valueOf(double d)将其他类型转换为字符串

package string;

/**
 * String提供了一组重载的静态方法valueOf
 * 作用是将其他类型转换为字符串
 */
public class ValueOfDemo {
    public static void main(String[] args) {
        int a = 123;
        double d = 123.123;
        String s1 = String.valueOf(a);//"123"
        System.out.println("s1 = "+s1);

        String s2 = String.valueOf(d);
        System.out.println("s2 = "+s2);//123.123

        long l = Long.valueOf(s1).longValue();
        System.out.println(l);

        //这里顺便写一个 toString() 方法
        long number = 123456789;
        String code = Long.toString(number);
        System.out.println(code);
    }
}

11. trim()

package string;

/**
 * String trim()
 * 去除字符串两端的空白字符
 */
public class TrimDemo {
    public static void main(String[] args) {
        String str = "   hello          ";
        System.out.println(str);
        String trim = str.trim();
        System.out.println(trim);
    }
}

12. String substring(int beginIndex, int endIndex)截取字符串

package string;

/**
 * String substring(int start,int end)
 * 截取当前字符串中指定范围内的字符串.两个参数分别为开始的下标和结束的下标位置.
 * 注:在java API中通常使用两个数字表示范围时都是"含头不含尾"的
 */
public class SubstringDemo {
    public static void main(String[] args) {
        //             01234567890
        String host = "www.tedu.cn";
        //获取域名
        String name = host.substring(4,8);
        System.out.println(name);
        //一个参数的重载方法则是从指定位置截取到字符串末尾
        name = host.substring(4);
        System.out.println(name);

        String name1 = getHostName("http://www.tedu.com");
        System.out.println(name1);//tedu
        String name2 = getHostName("doc.canglaoshi.org");
        System.out.println(name2);//canglaoshi
        String name3 = getHostName("www.tts.com.cn");
        System.out.println(name3);//tts
    }

    public static String getHostName(String address){
        //完成方法内容,返回address中的域名部分
        int start = address.indexOf(".")+1;//找到第一个"."之后第一个字符的位置
        int end = address.indexOf(".",start);//找到第二个"."的位置
        return address.substring(start,end);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值