JavaSE数组练习-句子翻转+字符替换+打印特殊三角

1。句子翻转

要求:给定字符串如"hello, i am a student!",对英语句子进行翻转,并保持英语单词的顺序不变 ,对标点符号当成字母处理。

代码实现:

import java.util.Arrays;

/**
 * Created on 2020/9/20.
 *
 * @author Resumebb
 * @Description:英语句子单词翻转,保持原句意不变,标点符号当字母处理
 */
public class wordReverse {

    //思路:先翻转整个句子,然后翻转每个单词,空格的ASCLL为32
public static String wordReverse(String str)
{
    //若字符串为空或者长度小于2则不用翻转
    if(str == null ||str.length()<2)
    {
        return str;
    }

    char[] chars = str.toCharArray();
    int start = 0, end =0;

    System.out.println("原句子:"+str);
    reserve(chars,0,chars.length-1);
    System.out.print("翻转后:");
    for(char value : chars)
        System.out.print(value);
    System.out.println();

    while(end < chars.length)
    {

         if(chars[end]== 32)//当遇到空格时,把空格位置end之前的字母进行翻转,将end的下一地址作为start
        {
            reserve(chars,start,end-1);
            end++;
            start = end;
        }
        else if(chars[end] != 32)//非空格情况下end指针后移,若到end指到最后一个元素则将strat到最后一个元素进行翻转。
        {
            if(end == chars.length-1)
            {
                reserve(chars,start,end);
            }
            end++;
        }
    }
    return String.valueOf(chars);
}

//翻转函数
private static void reserve(char[] chars,int start,int end)
{
    char temp = ' ';
    while(start < end){
        temp = chars[start];
        chars[start++] = chars[end];
        chars[end--] = temp;
    }
}



    public static void main(String[] args){

/*             单词反转测试用例             */
        String str = "  hello, i am a student!  ";
        String newStr = wordReverse(str);
        System.out.println("最终结果:"+newStr);
/
    }
}

结果: 

 

2.特殊三角形

根据输入打印出特殊三角,如输入4,打印如下:

1

11

121

1321

   //打印三角形
    public static void deplay(int[][]arr){
        for(int i = 0;i< arr.length;i++){
            for(int j =0;j< arr[i].length;j++){
                if(j == 0 || i == j){
                    arr[i][j] = 1;
                }else {
                    if(i-1>0) {
                        arr[i][j] = arr[i - 1][j] + 1;
                    }
                }
            }
        }
        for(int i = 0;i<arr.length;i++){
            for (int j =0;j<=i;j++){
                System.out.printf(arr[i][j]+" ");
            }
            System.out.println(" ");
        }
        
    }

 

3.字符替换

要求:把字符串中的空格替换成两个#,限制用char数组去做,同时进行数组扩容

import java.util.Arrays;
import java.util.Scanner;
/**
 * Created on 2020/9/20.
 *
 * @author Liu Wanbo
 * @Description:
 */
public class wordReplace {


    //字符替换
    /*
    思路:
    先找到空格总个数,进行数组扩容,然后进行替换
    * */
    public static char[] myReplace(char[] chars){

        //若为空,不做处理
        if(chars.length == 0 || chars == null){
            return chars;
        }

        int count = 0;
        int i = 0;
        while (i < chars.length ){
            if(chars[i] == 32){
                count++;
            }
            i++;
        }

        chars = Arrays.copyOf(chars,chars.length+count);
        //遍历到空格替换,整体后移,并替换下一个
        for(i=0; i<chars.length; i++){
            if(chars[i]==32){
                chars[i] = '#';
                move(chars,i);
                chars[i+1] = '#';
                i ++;
            }
        }

        return chars;
    }

    public static void move(char[] chars,int pos){
        for(int i=chars.length-1; i>pos; i--){
            chars[i] = chars[i-1];
        }
    }

    public static void arrDisplay(char[] chars){
        for (char c : chars)
            System.out.print(c);
        System.out.println();
    }
    public static void main(String[] args) {
/*                 打印三角测试用例            */
//        Scanner in = new Scanner(System.in);
//        System.out.print("input:");
//        int len = in.nextInt();
//        int[][] arr =new int[len][len];
//        deplay(arr);


/*                  字符替换测试用例            */
        String str = "hello, i am a  strudent!";
        char[] chars = str.toCharArray();
        System.out.println("原数组:");
        arrDisplay(chars);
        System.out.println("替换前数组长度:"+chars.length);
        chars = myReplace(chars);
        System.out.println("替换后:");
        arrDisplay(chars);
        System.out.println("替换后数组长度:"+chars.length);

    }
}

 

4.删除指定元素

删除数组重复元素同时进行缩容 。

        public static int[] deleteValue(int[] arr,int value){
            if(arr == null || arr.length == 0){
                return null;
            }
            int count = 0;
            for(int i = 0;i<arr.length-count;){
                if(arr[i] == value){// 找到value,进行数据移动
                    for(int j = i+1;j < arr.length;j++){
                        arr[j-1] = arr[j];
                    }
                    count++;
                }else{
                    i++;
                }
            }
            return Arrays.copyOf(arr,arr.length-count);//
        }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值