JAVA语言基础——(五)字符串(逆置)

一、String下的方法

package practise;

import java.util.Arrays;
import java.util.Scanner;

public class StringMethod {

    public static String leftTurn(String str){

        return str;
    }

    public static void main(String[] args) {
        /*Scanner s = new Scanner(System.in);
        String str1 = s.nextLine();
//        System.out.println(str1);*/
        System.out.println("========.charAt(int)=========");
        String str2 = "helloworld";
        System.out.println("str2的长度:" + str2.length());
        System.out.println(str2.charAt(0));//h  返回字符串该下标对应的字符
        System.out.println("========.codePointAt(int)=========");
        String str3 = "abcd";
        System.out.println(str3.codePointAt(0));//97    返回该下标对应字符的编码
        System.out.println("=========.codePointBefore(int)========");
        System.out.println(str3.codePointBefore(1));//97    返回该下标的前一个字符的编码
        System.out.println("=======.getChars(int,int,char[],int)==========");
        String str4 = "asdfgh";
        char[] arr = new char[6];
        char[] arr2 = new char[6];
        str4.getChars(0,5,arr,0);//将字符串复制到一个字符数组
        //str4.getChars(arr2,2);    报错
        System.out.println(str4);
        System.out.println(arr);
        System.out.println("========.equals(String)=========");//将两个字符串进行比较
        String str5 = "qweert";
        String str6 = "qweert";
        String str7 = "qwerrt";
        System.out.println(str5.equals(str6));//true
        System.out.println(str5.equals(str7));//false
        System.out.println("===========.equalsIgnoreCase(String)===================");//不区分大小写的比较两个字符串
        String str11 = "Qweert";
        System.out.println(str11.equalsIgnoreCase(str5));//true
        System.out.println("========.subString(int,int)=========");
        String str8 = "substring";
        String str9 = str8.substring(1,4);//将str8的1~4(不包括4)复制到str9  容易计算子串的长度
        System.out.println(str9);
        System.out.println("========修改=========");
        String str10 = str8.substring(0,3) + "sub";//先提取需要的字符,在拼接上新添加的字符
        System.out.println(str10);
        System.out.println("========+拼接=========");
        String s = "hello";
        String s2 = "world";
        String s3 = s + s2;//按顺序拼接
        System.out.println(s3);
        int a = 123;
        String s4 = s + a;//不是String类型,在拼接时也会转换成字符串型
        System.out.println(s4);
        System.out.println("===========.toCharArray()==============");
        String strr = "aaaaaaaaaa";//将字符串转换为字符数组
        char[] ch = strr.toCharArray();
        System.out.println(Arrays.toString(ch));
        System.out.println("========.copyValueOf=============");//将数字元素复制成字符串
        String strr2 = String.copyValueOf(ch);
        System.out.println(strr2);
        
    }
}

二、练习

1.字符串左旋 如abcdefg——》cdefab

//左旋    abcdefg——》cdefab
package demo;

import java.util.Arrays;
import java.util.Scanner;

public class Demo1024 {
    public static char[] leftTurn(char[] array,int a){//左旋a个字符
        char tmp = 0;
        for(int i = 0;i < a / 2;i ++){//前a个元素逆序
            tmp = array[i];
            array[i] = array[a - 1 - i];
            array[a - 1 - i] = tmp;
        }
        for(int j = a;j < (array.length + a) / 2;j ++){//剩下的元素逆序
            tmp = array[j];
            array[j] = array[array.length - 1 + a - j];
            array[array.length - 1 + a - j] = tmp;
        }
        for(int k = 0;k < array.length / 2;k ++){//将整个数组逆序
            tmp = array[k];
            array[k] = array[array.length - 1 - k];
            array[array.length - 1 - k] = tmp;
        }
        return array;
    }

    public static char[] toArray(String str){//字符串转化为字符数组
        char[] arr = new char[str.length()];//新建一个长度为该字符串长度的字符型数组
        str.getChars(0,str.length(),arr,0);//将字符串复制到数组内
        //System.out.println(arr);
        return arr;
    }

    public static void main(String[] args) {
        System.out.println("请输入一个字符串:");
        Scanner s = new Scanner(System.in);
        String str = s.nextLine();
//        char[] arr1 = toArray(str);
//        System.out.println(arr1);
//        System.out.println(Arrays.toString(arr1));
        char[] arr = leftTurn(toArray(str),3);
//        System.out.println(Arrays.toString(arr));
        System.out.println(arr);
    }
}
package demo;

import java.util.Scanner;

public class Demo1026 {
    //将一个字符串的某部分逆序
    public static String reverse(String str,int begin,int end){
        char[] ch = str.toCharArray();//字符串转换成数组
        char tmp = 0;//中间变量
        while(begin < end){//开始和结束部分没有相遇,进入循环
            //交换
            tmp = ch[begin];
            ch[begin] = ch[end];
            ch[end] = tmp;
            begin ++;//开始位置为下一个下标
            end --;//结束位置为前一个下标
        }
        return String.copyValueOf(ch);//返回字符串
    }

    public static void leftRoadString(String str,int n){//左旋
        if(str ==null || n < 0 || n > str.length()){
            return;
        }
        int left = 0;
        int leftend = n - 1;
        int right = n;
        int rightend = str.length() - 1;
        str = reverse(str,left,leftend);
        str = reverse(str,right,rightend);
        str = reverse(str,left,rightend);
        System.out.println(str);
    }

    public static void main(String[] args) {
        System.out.println("输入一个字符串:");
        Scanner s = new Scanner(System.in);
        String str = s.nextLine();
        System.out.println(str);
        leftRoadString(str,2);

    }
}

2.一句话中的单词逆置,"Here is Tulun" ===> "Tulun is Here"

package demo;

import java.util.Scanner;

public class ReversrSentence {
    public static void reverse(char[] ch,int begin,int end){
        char tmp = 0;
        while(begin < end){
            tmp = ch[begin];
            ch[begin] = ch[end];
            ch[end] = tmp;
            begin ++;
            end --;
        }
    }

    public static String reverseSentence(String str){
        if(str == null){
            return null;
        }
        char[] ch = str.toCharArray();
        reverse(ch,0,ch.length - 1);//整体逆置
        int i = 0;//单词开始
        int j = 0;//单词结束
        while(i < ch.length){
            if(ch[j] == ' ' || j == str.length()){//j是空格,i~j的部分逆置
                reverse(ch,i,--j);
                i = ++j;
            }else if(ch[i] == ' '){//i是空格,i向后走作为下一个单词的开始
                i ++;
                j ++;
            }else{//都不是空格,j向后走,寻找单词的结束
                j ++;
            }
        }
        return String.copyValueOf(ch);

    }
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        String str = s.nextLine();
        System.out.println(reverseSentence(str));
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42479293/article/details/83387671
今日推荐