java -字符串取重,字符串操作和String类

目录

1.用数组解决:

2.标志法:

3.字符串操作

4.字符串类

4-1构造字符串

4-2字符串的分隔和替换

4-3字符串与数组之间的转换

2.split方法(字符串转法)

3.将字符串转成字节数组

4-4StringBuilder常用方法


1.用数组解决:

例如

 当j=3时,a重复那么将后面的元素向前移,然后再缩容数组。

    public static void main(String[] args) {
   demotext dt=new demotext();
   dt.method();

    }

    public void method(){
        System.out.println("输入一个字符串:");
        Scanner sc=new Scanner(System.in);
        String str=sc.next();
       char[] arr={};

        for (int i = 0; i <str.length() ; i++) {
            arr= Arrays.copyOf(arr,arr.length+1);     //数组扩容
            arr[i]=str.charAt(i);
        }
        for (int i = 0; i <arr.length ; i++) {
            for (int j = i+1; j <arr.length ; j++) {
                if(arr[i]==arr[j]){
                    for (int k = j; k <arr.length-1; k++) {     //将j后面元素都往前移
                        arr[k]=arr[k+1];
                    }
                    j=i;                                        //将j只向i再次寻找剩下与本次i所对应的元素的相同元素
                    arr=Arrays.copyOf(arr,arr.length-1);
                }
            }
        }
        for (char a:arr
             ) {
            System.out.print(a+" ");
        }
        }

2.标志法:

例如:

                a b c a b c b b,我们不妨再创建个数组,这个数组长度与上个数组长度相同,但内容全都为0.则     0  0 0 0 0 0 0 0.然后我们进行循环匹配,当a重复时,则使它对应的下标0数组为1.同理bc也一样。那么会是  a b c a b c b b

                                   0 0 0 1 1 1 1 1    

这时光输出0元素所对应的字符就达到取重效果。

  //字符逐个输入给数组
        System.out.println("输入一个字符串:");
        Scanner sc=new Scanner(System.in);
        String str=sc.next();
        char[] arr={};
        for (int i = 0; i <str.length() ; i++) {
            arr= Arrays.copyOf(arr,arr.length+1);
            arr[i]=str.charAt(i);
        }
        int[] arr1=new int[arr.length];
        for (int i = 0; i <arr1.length ; i++) {
            arr1[i]=0;
        }
        for (int i = 0; i < arr.length ; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
        for (int i = 0; i <arr1.length ; i++) {
            System.out.print(arr1[i]+" ");
        }
        //获取arr每个字符找相同为1
        for (int i = 0; i < arr.length; i++) {
            for (int j = i+1; j < arr.length ; j++) {
                if(arr[i]==arr[j]){
                    arr1[j]=1;
                }
            }
        }
        System.out.println();
        for (int i = 0; i < arr.length ; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
        for (int i = 0; i <arr1.length ; i++) {
            System.out.print(arr1[i]+" ");
        }
        //输出不为1 的字符
        System.out.println();
        for (int i = 0; i < arr.length ; i++) {
            if (arr1[i]==0){
                System.out.print(arr[i]);
            }

            }
        }

3.字符串操作

3-1操作

返回一个新字符串,其中所有字母大写   toUpperCase()

返回一个新字符串,其中所有字母小写   toLowerCase()

String str1="jdk";
    String str2=str1.toUpperCase(Locale.ROOT);
    System.out.println(str2);

  获得子字符串str.charAt()                   

 String str1="jdk"; 
  char char1=str1.charAt(1);
    System.out.println(char1);

截取从特定位置到最后一个字符   substring()     

 String str1="jdk";
 String str3=str2.substring(1);  //左闭右也闭
 System.out.println(str3);
 String str4=str2.substring(0,2); //左闭右开
 System.out.println(str4);
String str = "  我爱 JAVA 编程 ";
//获取字符串的长度
int length = str.length();
System.out.println("字符串str的长度是:" + length);
//获取字母‘J’在字符串第一次出现的位置
int indexJ = str.indexOf("J");
System.out.println("字母\'J\'在字符串第一次出现的位置:" + indexJ);
//获取字母A在字符串最后一次出现的位置
/*
String str1="abcabcbb";
int indexA= str1.indexOf("a"); //第一次a出现的位置是0
int indexA2= str1.indexOf("a",1); //从1位置后开始第一次出现a的下标
*/
int lastIndexA = str.lastIndexOf('A');
System.out.println("字母\'A\'在字符串最后一次出现的位置:" + lastIndexA);
//获取索引为8的字符
char charAt = str.charAt(str.length()-1-1);
System.out.println("索引为8的字符是:" + charAt);
//trim去字符串前后的空格
String trim = str.trim();
System.out.println("去首尾空格前:" + str);
System.out.println("去首尾空格后:" + trim);
//需求:去掉字符串中所有的空格,应该用replace方法
String replaceAll = str.replaceAll(" ", "");
System.out.println("去空格前:" + str);
System.out.println("去空格后:" + replaceAll);
//concat在字符串后面添加指定字符串
String target = "我爱";
String concat = target.concat("铁板桥");
System.out.println(concat);

4.字符串类

字符串的不可变性(地址的引用), String对象一旦被创建则不可修改,是不可变的,所谓的修改是创建了新的对象,所指向的内存空间不变。

4-1构造字符串

创建字符串的几种形式
String str1 = "oracle";
		String str2 = new String("oralce");
		String str3 = new String();
		str3 = "oracle";

String str=new String("内容");

String s1="hello word";
String s2=new String("hello word");
String s3="hello word";

(1.)s1==s2  ?(2).s1==s3  ? 

 第一个为false,第二个为true。s1和s2内容上是相同的,但是为不同的对象。

4-2字符串的分隔和替换

replace(oldchar: char, new char: char)   将字符串中所有匹配的字符替换成新的字符,然后返回新的字符串。

replace(oldString: String , new String: String)  将字符串中第一个匹配的子字符串替换成新的子字符串,然后返回新的字符串。

replaceAll(oldString: String , new String: String)  将字符串中所有匹配的子字符串替换成新的子字符串,然后返回新的字符串。

split():     返回一个字符串数组,其中包含被分隔符分隔的子字符串集。

4-3字符串与数组之间的转换

1.tocharArray()方法    例如   将java转换成数组    char[  ]  arr="java".toCharArray();(字符转法)

  String str = "我爱 JAVA 编程 语言";
    char[] arr=str.toCharArray();
    for (char a :arr
         ) {
        System.out.print(a+" ");
    }
}

2.split方法(字符串转法)

String str = "我爱 JAVA 编程 语言";
		//字符串截取成字符串数组
		String[] split = str.split(" ");
		//System.out.println(Arrays.toString(split));
		//[我爱, JAVA, 编程, 语言]
		for(String s:split) {
			System.out.println(s);
		}

3.将字符串转成字节数组

String str = "我爱 JAVA 老师";
		byte[] bytes = str.getBytes("UTF-8");
		for (int i = 0; i < bytes.length; i++) {
			System.out.print(bytes[i] + " ");
		}

4-4StringBuilder常用方法

//StringBuilder常用方法
		StringBuilder sb = new StringBuilder("Oracle");
		//为Oracle后添加Apple,再添加Google
		sb.append("Apple").append("Google");
		System.out.println(sb);
		//当前对象值:OracleAppleGoogle,再Apple和Oracle之间增减IBM
		sb.insert(6, "IBM");
		System.out.println(sb);
		//当前对象值:OracleIBMAppleGoogle,将IBM替换成Alibaba
		sb.replace(6, 9, "Alibaba");
		System.out.println(sb);
		//当前对象值:OracleAlibabaAppleGoogle,删除Apple
		sb.delete(13, 18);
		System.out.println(sb);
		//reverse():将字符串反转输出
		StringBuffer sb1 = new StringBuffer("abc");
		sb1.reverse();
		System.out.println(sb1.toString());

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值