String类

常见的String定义形式

public class Demo1 {
    public static void main(String[] args) {
        String a=new String("1231");
        String b="123123";
        char[] array={'z','x','c'};
        String c=new String(array);


    }
}

 String中存在Hash和value两个值,Hash的值一般默认为0,value的值一般存放地址的作用。

Length

   String str1="";
        System.out.println(str1.isEmpty());
                String str2=null;
        System.out.println(str2.isEmpty());

 

 用到null的时候会出现空指针异常的情况。所以String中为空和空指针是两种不同的形式。

 String类型的比较

       String a="123123";
        String b="123123";
        System.out.println(a==b);
        System.out.println(a.equals(b));
        String s1 = new String( "hello");
        String s2 = new String( "hello");
     
        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));//被String重写了

要用equals方法来进行一一判断。

 为什么上面的运行结果都为True

因为他们是直接赋值在堆中公用同一个地址。

而new String中创造两个不同的地址,导致他们在比对的时候会出现false和true两种不同的方法。

Compare方法

    public static void main(String[] args) {
        String a="223123";
        String b="123123";
        System.out.println(a.compareTo(b));
    }

比较大小的时候

对应最小字符串中的字符进行比较

1.对应字符不一样 就看对应字符的ASCII码值。

2.当前面相同时,看对应字符长度不一样,长则大

保证它们是同一类。

返回值是ACSSLL码的差值。

IoIgonreCase方法 

基于compare和equals方法用

        System.out.println(a.equals(b));
        System.out.println(a.equalsIgnoreCase(b));
        System.out.println(a.compareTo(b));
        System.out.println(a.compareToIgnoreCase(b));


 字符串的查找

返回对应下标的字符。

 public static void main(String[] args) {
        String a="223123";
        char ch=a.charAt(1);
        System.out.println(ch);
    }

返回对应字符出现的下标位置

  public static void main(String[] args) {
        String a="223123";
        char ch=a.charAt(1);
        System.out.println(ch);
        int index=a.indexOf('1');
        System.out.println(index);
    }

从指定位置开始找某个字符出现的位置。

   int index1=a.indexOf('1',3);
        System.out.println(index1);

从后面往前面找这个字符
 


    public static void main(String[] args) {
        String a="223123";
        System.out.println(a.lastIndexOf('3'));
    }

  从那个位置开始找哪个字符

 public static void main(String[] args) {
        String a="223123";
        System.out.println(a.lastIndexOf('3',3));
        
    }

转换大小写

 public static void main(String[] args) {
        String a="sadA";
        System.out.println(a.toLowerCase());
        System.out.println(a.toUpperCase());
    }

 转换为大小写,字符串改变后,都产生了字符串的转变。

 字符串的转换

可以用valueof方法

    public static void main(String[] args) {
        //整数转换为字符串
        String str=String.valueOf(123);
        System.out.println(str);
        
    }

  包装类:类中有更多的方法 以便使用

字符串转换数组
  public static void main(String[] args) {
        String str="hello";
        char[]chars=str.toCharArray();
        for(char ch:chars){
            System.out.println(ch);
        }
    }
 字符串的替换
 public static void main(String[] args) {
        String a="sadA";
        System.out.println(a.replace('a','c'));
    }

 replaceFirst()直替换第一个。

字符串的拆分

用spilt函数

   public static void main(String[] args) {
        String a="sadA&sadsa";
        String[]ret=a.split("&");
        for (int i=0;i<ret.length;i++)
        System.out.println(ret[i]);
    }

字符”|","*"+"世都得加上转义字符,前面加上"\\"

  public static void main(String[] args) {
        String str = "name=zhagnsan&age=10";//实现多次分割
         String[] ret = str.split( "&");
     for(String x : ret) {
System.out.println(x);
String[] s = x.split( "=");
for(String ss : s) {
        System.out.println(s);
    }

}
字符串的截取
 public static void main(String[] args) {
        String str="aasdasds";
        String ret=str.substring(1,3);
        System.out.println(ret);
    }

 省略左右空格

public static void main(String[] args) {
        String str = "   aa   sdasds";
        System.out.print(str.trim());
    }

 字符串连接

    public static void main(String[] args) {
        String a="asasd";
        for (int i=0;i<1000;i++) {
            a = a + "asd";
        }
        StringBuffer str=new StringBuffer("asasd");
        for (int i=0;i<1000;i++) {
        str.append("asd");
        }
        StringBuilder str2=new StringBuilder("asasd");
        for (int i=0;i<1000;i++) {
            str2.append("asd");
        }
        str2.reverse();
    }

 第一种不建议循环,每次创建对象,时间过长

第三种 sb方式 str2.reverse();调换字符串的前后次序

StringBuffer使用在多线程的情况下,(含有synchronized),在进行append函数时,不会被干扰,

(会过多消耗资源)

StringBuilder使用在单线程的情况下


stringBuilder22 = new StringBuilder(str2);

 应用

public class Main {
    //回文
    public static void main(String[] args) {
        char a='3';
        System.out.println(Character.isDigit(a));//判断是否是数字
        System.out.println(Character.isLetter(a));//判断是否是字母
    }
}
  public static void main3(String[] args) {
        //回文问题
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        boolean b = true;
        int left = 0;
        int right = str.length() - 1;

        while (left < right) {
            char leftChar = str.charAt(left);
            char rightChar = str.charAt(right);

            if (!Character.isLetterOrDigit(leftChar)) {
                left++;
            } else if (!Character.isLetterOrDigit(rightChar)) {
                right--;
            } else if (Character.toLowerCase(leftChar) != Character.toLowerCase(rightChar)) {
                b = false;
                break;
            } else {
                left++;
                right--;
            }
        }

        if (b) {
            System.out.println("是回文");
        } else {
            System.out.println("不是回文");
        }
    }


    public boolean isCharnum(char ch){
        if(Character.isDigit(ch)&&Character.isLetter(ch)) {
            return true;
        }
        else {
            return false;
        }
    }
    public static void main2(String[] args) {
        //打印最后一个数组的长度

        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        String [] arr=str.split(" ");
        System.out.println(arr[arr.length-1].length());
    }
    public static void main1(String[] args) {
        //找出数组中第一个不重复出现的字符
        int[] count = new int[26];
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        for (int i = 0; i < str.length(); i++) {
            count[str.charAt(i) - 'a']++;
        }
        for (int i = 0; i < str.length(); i++) {
            if ( count[str.charAt(i) - 'a']==1) {
                System.out.println(str.charAt(i));
            }
        }

    }

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值