java思维题_Java思维题

1、求取字符串中出现的第一个非重复字符。

比如: "hello" 中的 h, "hello, how r you?" 中的 e

2、使用26字符母实现加密

比如: StringUtil 加密后的结果为 FgevatHgvy,Hello 加密的结果为 Uryyb

3、翻转一个字符串

比如:“你好啊!” 翻转成 "!啊好你"

4、检查一个字符串是否为空(包括 null 的判断)

实现方法(个人想法):

第一题

//第一种实现方式

public String getIsStr(String str){

String[] arr = str.replaceAll("\\s","").split("");

for (int i = 0; i

if( str.lastIndexOf(arr[i]) == str.indexOf(arr[i]) ){

return arr[i].toString();

}

}

return "";

}

//第二种实现方式

String str ="hello, how r you?";

String liststr = str.replaceAll("[^a-zA-Z]","");

String[] listarr = str.split("");

for (int i = 0; i

boolean flag = true;

for (int j = i+1 ;j

if(listarr[i].equals(listarr[j])){

flag = false;

continue;

}

}

if (flag){

System.out.println(listarr[i]);

break;

}

}

//第三种实现方式

public char find(String str){

//存放重复的数据集合

HashSet data = new HashSet<>();

//存放不重复的数据集合

List data1 = new ArrayList<>();

for (int i = 0; i

//将 目标字符串 分割成 字符

char c = str.charAt(i);

//如果集合data中存在这个目标内容,跳出

if(data.contains(c)){

continue;

}

//如果集合 data1 中 已经存在此目标内容,进行 移除 向 data集合中添加数值,否则继续向data1集合中添加

if(data1.contains(c)){

data1.remove((Character) c);

data.add(c);

}else{

data1.add(c);

}

}

if(data1.size() >0 ){

return data1.get(0);

}else{

return 0;

}

}

第二题

public String rotate(String str){

// 接收结果的变量

String result ="";

//"a","b","c","d","e","f","g","h","i","j","k","l","m"

//"n","o","p","q","r","s","t","u","v","w","x","y","z"

//大小写字符数组

String [] lower = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};

String [] upper = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};

//将 目标字符串 去掉 里面一些符号 并且 分割

String [] arr = str.replaceAll("\\s","").split("");

for (int i = 0; i

//将目标值都跟 小写字符数组 对一遍 当目标值等于 lower里 相对应的值时, 使用一个小算法

for (int j = 0 ; j < lower.length; j++) {

if( arr[i].equals(lower[j]) ){

// 比如 当 目标值 是 a 那么通过计算 得到将是 lower数组的 u

result +=lower[(j + 13)%26];

}

}

//将目标值都跟 大写字符数组 对一遍 当目标值等于 upper里 相对应的值时, 使用一个小算法

for (int k = 0; k

if( arr[i].equals(upper[k]) ){

// 比如 当 目标值 是 A 那么通过计算 得到将是 lower数组的 U

result +=upper[(k + 13)%26];

}

}

}

return result;

}

//第二种方式

public String rotate1(String str){

String result = "";

String [] arr = str.split("");

for(int i =0 ;i

//将数组里值转成ASCII码 65 - 90 大写26字母 97 - 122 小写字母

if( arr[i].hashCode() >=65 && arr[i].hashCode()<=90 ){

int index1 = arr[i].hashCode();

if(index1 <= 78){

result += (char)(index1 + 13 );

}else{

result += (char)(index1 - 13 );

}

//65 = A = N = 78

// 65 + 13 =78

}else if( arr[i].hashCode() >=97 && arr[i].hashCode() <=122 ){

int index1 = arr[i].hashCode();

if(index1 <= 110 ){

result += (char)(index1 + 13 );

}else{

result += (char)(index1 - 13 );

}

}else{

result +=arr[i];

}

}

return result;

}

第三题

//第一种方式

public String reverse(String str){

//将字符 分割成 字符数组

String [] arr = str.split("");

//获取 字符数组的长度

int size = arr.length;

//拿一个结果变量来接收

String result = "";

//循环

for (int i = 0; i

// 倒取 数组的值 赋予 结果变量

result += arr[ --size];

}

return result;

}

//第二种方式

public String reverse1(String str){

StringBuilder result =new StringBuilder(str);

return result.reverse().toString();

}

第四题

public boolean isEmpty(String str){

//字符串对象和字符串变量这两个概念的区别

//字符串变量保存一个字符串对象的引用

//判断字符串是否空涉及两个层次

//1、首先判断字符串变量的引用是否为空,即空对象的概念,用null来判断,可以用== null;(注意不能用equals(null),在参数为null情况下,返回值永远是false)

//2、是在不为空对象的情况下,在判断字符串对象是否为空串,即长度为0.用length()==0

if(!( str == null ||str.length() == 0)){

return true;

}

return false;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值