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);
/
}
}

结果: 

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

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(" ");
}

}

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

 

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);//
}