1 问题描述

给定一个字符串,要求将字符串前面的若干个字符移到字符串的尾部。例如,将字符串“abcdef”的前3个字符‘a’、‘b’和‘c’移到字符串的尾部,那么原字符串将变成“defabc”。请写一个函数实现此功能。

2 解决方案

2.1 蛮力移位


此方法将需要移动的字符一个一个地移到字符串的尾部,具体代码如下:

package com.liuzhen.string_1;

public class StringRevolve {
//方法1:蛮力移位
/*
* 参数s:给定字符串
* 返回每次移动一位后的结果字符串
*/
public String bruteOne(String s){
char[] A = s.toCharArray();
char temp = A[0];
for(int i = 1;i < A.length;i++)
A[i-1] = A[i];
A[A.length-1] = temp;
return String.valueOf(A);
}
/*
* 参数s:给定字符串
* 参数m:字符串前面需要移动的字符个数
* 返回最终移动目标字符串
*/
public String bruteRevolve(String s,int m){
for(int i = m;i > 0;i--){
bruteOne(s);
System.out.println(bruteOne(s));
s = bruteOne(s);
}
return s;
} public static void main(String[] args){
StringRevolve test = new StringRevolve();
String s = "abcdef";
String result = test.bruteRevolve(s,8);
System.out.println("使用蛮力移位法得到结果:"+result);
}
}

运行结果:

bcdefa
cdefab
defabc
efabcd
使用蛮力移位法得到结果:efabcd

2.2 三步反转

此方法分3个步骤:

(1)将原字符串分为X和Y两部分,其中X为“abc”,Y为“def”;

(2)将X的所有字符反转,即相当于将“abc”变为“cba”;对Y也进行反转,由“def”变为“fed”;

(3)最后,将上述步骤得到的结果整体再进行反转,即将“cbafed”整体反转为“defabc”,这样就实现了字符串旋转。

具体代码如下:

package com.liuzhen.string_1;

public class StringRevolve {

    //方法2:三步反转
/*
* 参数A:字符串转化后的字符数组
* 参数start:开始进行反转的字符位置
* 参数end:进行字符反转的最后一个字符位置
*/
public void revolveString(char[] A,int start,int end){
while(start < end){
char temp = A[start];
A[start++] = A[end];
A[end--] = temp;
}
}
/*
* 参数s:给定字符串
* 参数m:字符串前面需要移动的字符个数
*/
public String getRevolveString(String s,int m){
char[] A = s.toCharArray();
int len = s.length(); //字符串的总长度
m = m % len; //如果移动位数大于字符串总长度,则其移动位数默认为m取余len
revolveString(A,0,m-1);
revolveString(A,m,len-1);
revolveString(A,0,len-1);
return String.valueOf(A);
} public static void main(String[] args){
StringRevolve test = new StringRevolve();
String s = "abcdef";
String result1 = test.getRevolveString(s, 4);
System.out.println("使用三步反转法得到结果:"+result1);
}
}

运行结果:

使用三步反转法得到结果:efabcd

Java实现字符串的旋转的更多相关文章

  1. Java常量字符串String理解

    Java常量字符串String理解 以前关于String的理解仅限于三点:1.String 是final类,不可继承2.String 类比较字符串相等时时不能用“ == ”,只能用  "eq ...

  2. Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0

    课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值  String str=& ...

  3. java截取字符串中的数字

    java从字符串中提取数字 随便给你一个含有数字的字符串,比如: String s="eert343dfg56756dtry66fggg89dfgf"; 那我们如何把其中的数字提取 ...

  4. 三张图彻底了解Java中字符串的不变性

    转载: 三张图彻底了解Java中字符串的不变性 定义一个字符串 String s = "abcd"; s中保存了string对象的引用.下面的箭头可以理解为"存储他的引用 ...

  5. java中字符串的非空判断

    问题如下:在java 中 字符串为null 如何判断String str;if(str==null) ??str.equal("null") ?? 答:我觉得应该搞清楚字符串对象和 ...

  6. java中字符串String 转 int(转)

    java中字符串String 转 int String -> int s="12345"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法 ...

  7. Java:字符串类String的功能介绍

    在java中,字符串是一个比较常用的类,因为代码中基本上处理的很多数据都是字符串类型的,因此,掌握字符串类的具体用法显得很重要了. 它的主要功能有如下几种:获取.判断.转换.替换.切割.字串的获取.大 ...

  8. Java空字符串与null的区别和判断字符串是否为空的方法

    Java空字符串与null的区别: 1.类型null表示的是一个对象的值,而并不是一个字符串.例如声明一个对象的引用,String a = null ;""表示的是一个空字符串,也 ...

  9. android112 jni 把java的字符串转换成c的字符串,数组处理

    package com.itheima.charencode; import android.os.Bundle; import android.app.Activity; import androi ...

随机推荐

  1. 在一段字符串中的指定位置插入html标签,实现内容修改留痕

    客户需求:实现内容修改留痕,并且鼠标移动到元素时,显示修改人和修改时间. (其实呢本人觉得这个如果是静态的页面,或者是后端拼接好的html,都很好实现,如果让前端动态实现就......) 前端实现的方 ...

  2. springDataJPQL实现增删改查及分页,原生sql查询,根据方法命名规则实现查询以及Specification查询

    一.使用方法 1.在dao中定义开一个方法,使用方法的参数设置jpql,并且使用方法的返回值接受查询结果,在方法上添加@query注解,在注解中写jpql语句进行增删改查,测试 2.使用原生的sql语 ...

  3. JUC并发基础

    目录 一.Volatile 0.基础知识 1. volatile的解释 3.volatile的应用 二.CAS 0.CAS的定义 1.CAS底层原理 2.CAS的缺点 3.ABA问题 三.集合类并发安 ...

  4. 接口(API)测试理念

    什么是接口测试 接口测试就是针对软件对外提供服务的接口的输入输出进行测试,以及接口间相互逻辑的测试,验证接口功能与接口描述文档的一致性: 测试的重点是检查数据交互.传递.和控制管理过程以及系统间的相互 ...

  5. 相机测试camera报告的问题

    AE问题 整体偏亮 整体偏暗 高光过爆 暗处过暗 对比度低/高 亮度: 关注暗处过暗 高光过爆   对比度: 关注头发,衣服 对比度低照片会有好像一层薄薄的,发蒙 关注植物,会有灰色的 AWB问题 偏 ...

  6. mysql 审计server_audit 模块

    server_audit模块是一个 mariadb  还是skysql 开发的一个mysql 的插件.可以做一些审计上面的工作. 众所周知,mysql 是里面是很难记录用户的操作命令的.用这个就可以. ...

  7. ASHRAE KAGGLE大能源预测(前三名方案总结+相关知识点讲解+python实现)

    @ 目录 1 概述 2 处理思想学习 2.1 移除异常值 2.2 缺失值 2.3 目标函数 2.4 特征工程 2.4.1 Savitzky-Golay filter 2.4.2 Bayesian ta ...

  8. day05:数组与字典常识(20170217)

    #1:数组功能的使用:print ("a4A".isdecimal()) #print ("18".isdigit()) #判断是否是数字print (&quo ...

  9. JSP知识点回顾

  10. 最优化之凸优化之Bregman算法

    本文介绍了Bregman迭代算法,Linearized Bregman算法(及在求解Basis Pursuit问题中的应用)和Split Bregman算法(及在求解图像TV滤波问题中的应用). 由于 ...