String类型的学习
一 :关于两个string类型变量是否相等:
请运行以下示例代码StringPool.java,查看其输出结果。如何解释这样的输出结果?从中你能总结出什么?
分析:
首先为s0开辟空间,然后给s1开辟空间时发现与s0相同,所以s1和s0地址是相同的,,然后给s2开辟空间时发现也是相同的,要让两个变量相同,需要使他们的数值和地址都要相同,故前两个输出都是true,第三个先new一个“hello”,在new一个“hello”时就会在开辟一个空间,所以两个不相同。故是false。
结论:
在Java中,内容相同的字串常量(“Hello”)只保存一份以节约内存,所以s0,s1,s2实际上引用的是同一个对象。
编译器在编译s2一句时,会去掉“+”号,直接把两个字串连接起来得一个字串(“Hello”)。这种优化工作由Java编译器自动完成。
当直接使用new关键字创建字符串对象时,虽然值一致(都是“Hello”),但仍然是两个独立的对象。
给字串变量赋值意味着:两个变量(s1,s2)现在引用同一个字符串对象“a”,所以,s1==s2返回true 。 String对象的内容是只读的,使用“+”修改s1变量的值,实际上是得到了一个新的字符串对象,其内容为“ab”,它与原先s1所引用的对象”a”无关,所以,s1==s2返回false;
代码中的“ab”字符串是一个常量,它所引用的字符串与s1所引用的“ab”对象无关。所以,s1=“ab”返回false。
String.equals()方法可以比较两个字符串的内容,他们的内容都是ab所以,返回true。
二:String.equals()方法
结果分析:当直接使用new关键字创建字符串对象时,虽然值一致(都是“Hello”),但仍然是两个独立的对象。,所以s1==s2返回false,但他们数值是一样的,所以s1.equal(s2)返回true。,s3,s4引用的同一个对象,所以数值和地址都相同,所以最后两个比较返回都是true。
三:字串加密
古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:
请编写一个程序,使用上述算法加密或解密用户输入的英文字串要求设计思想、程序流程图、源代码、结果截图。
设计思想:加密和解密的思想就是把一个字符串中的所有字符加上或减去一个固定的值,然后在输出来。首先传入一个字符串,构造一个加密和解密的方法,输入数字判断选择加密或者解密,在写方法时,加密方法,需要定义一个char[]类型的方法,传入一个字符串,返回一个char类型的数组,调用length()对字符串中的所有的字符进行加上一个3,如果是XYZ减去23,然后返回这个char数组即可,如果是解密方法,需要定义一个char[]类型的方法,传入一个字符串,返回一个char类型的数组,调用length()对字符串中的所有的字符进行减去一个3,如果是ABC加上23,然后返回这个char数组即可。
流程图:
源代码:package Demo;
import java.util.Scanner;
public class JiaMi {
public static void main(String[]args)
{
Scanner scanner=new Scanner(System.in);
System.out.println("请输入一个字符串");
String m=scanner.next();
System.out.println("请输入你想加密还是解密,加密输入1,解密输入2");
int n=scanner.nextInt();
while(n!=1&&n!=2)
{
System.out.println("请重新输入一个字符串");
n=scanner.nextInt();
}
if(n==1)
System.out.println(jiami(m));//如果下面的方法不定义为static类型的那摩在调用下面的方法时需这样写new JiaMi().jiami().
else if(n==2)
System.out.println(jiemi(m));
}
static char[] jiami(String m)//返回是数组时,定义时加个[]。
{
char[] c=new char [m.length()];
int i=0;
while(m.length()>i)
{
if(m.charAt(i)>=88 && m.charAt(i)<=90)
c[i]=(char)(m.charAt(i)-23);
else
c[i]=(char) (m.charAt(i)+3);
i++;
}
return c;
}
static char[] jiemi(String m)
{
char[] c=new char [m.length()];
int i=0;
while(m.length()>i)
{
if(m.charAt(i)<=67 && m.charAt(i)>=65)
c[i]=(char)(m.charAt(i)+23);
else
c[i]=(char) (m.charAt(i)-3);
i++;
}
return c;
}
}
结果截图:
结果分析:第一个截图是一个普通的加密结果,第二个是带有特殊字符的(XYZ)的加密验证,XYZ需要转换成ABC ,结果正确,第三个是带有特殊字符的解密验证(ABC),ABC需要转换成XYZ。验证无误。
String类型方法的总结:
主要包括Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()
2、String类的常用方法:
(1)public char charAt(int index)返回字符串中第index个字符
(2)public int length()返回字符串的长度
(3)public String toUpperCase()返回一个字符串为该字符串的大写形式
(4)public String toLowerCase()返回一个字符串为该字符串的小写形式
(5)public String replace(char oldChar,char newChar)在字符串中用newChar字符替换oldChar字符
(6)public String trim()返回将该字符串去掉开头和结尾空格后的字符串。
(7)char[ ] toCharArray() :将该String对象转换成char数组。
(8)getChars() 将这个字符串字符复制到目的字符数组。
String类型的学习的更多相关文章
- ElasticSearch 5学习(9)——映射和分析(string类型废弃)
在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...
- redis 学习(3)-- String 类型
redis 学习(3)-- String 类型 String-结构 结构:Key-Value对 Value:可以是字符串.数字,也可以是二进制数组 限制:Value最大值为512MB String-常 ...
- Android(java)学习笔记98:关于string类型的面试题
package cn.itcast_02; /* * String s = new String(“hello”)和String s = “hello”;的区别? * 有.前者会创建2个对象,后者创建 ...
- C++ Primer 学习笔记_32_STL实践与分析(6) --再谈string类型(下)
STL实践与分析 --再谈string类型(下) 四.string类型的查找操作 string类型提供了6种查找函数,每种函数以不同形式的find命名.这些操作所有返回string::size_typ ...
- Redis学习第二课:Redis String类型及操作
Strings类型 String是最简单的类型,一个Key对应一个Value,String类型是二进制安全的,可以包含任何数据,比如jpg图片或序列化的对象. Strings类型的操作: Set:设置 ...
- Android(java)学习笔记37:String类型的面试题
1. String类型面试题: package cn.itcast_02; /* * String s = new String(“hello”)和String s = “hello”;的区别? * ...
- C++ Primer 学习笔记_6_标准库类型 -- 命名空间using与string类型
标准库类型(一) --命名空间using与string类型 引: 标准库类型是语言组成部分中更主要的哪些数据类型(如:数组.指针)的抽象! C++标准库定义的是高级的抽象数据类型: 1.高级:由 ...
- Redis学习笔记(三)-数据类型之string类型
string是redis最基本的类型,而且string类型是二进制安全的.意思是redis的string可以包含任何数据.比如jpg图片或者序列化的对象.从内部实现来看其实string可以看作byte ...
- 把《c++ primer》读薄(3-1 标准库string类型初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1:养成一个好习惯,在头文件中只定义确实需要的东西 using namespace std; //建议需要什么再using声 ...
随机推荐
- 最小生成树--牛客练习赛43-C
牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...
- RHCE 共享文件系统
9.1 共享文件系统 概述: 共享文件系统通常有两种方式: 基于文件共享,一种直接共享文件夹给client端,常见的技术有NFS(Network File System )和 SMB (Server ...
- 【ZooKeeper】单机伪集群搭建(适用于mac)
1.配置 .zookeeper下载地址:http://apache.mirrors.lucidnetworks.net/zookeeper/ 可以选择需要的版本,我下载的是zookeeper-3.4. ...
- Visual Studio 2017 远程调试(Remote Debugger)应用
I.远程调试情景 项目部署在远程服务器或非本地环境中,需要 处理应用中遇到的一些错误时 (不能直接附加进程或F5调试应用). II. 远程调试准备 1.远程服务器--操作系统和硬件要求 MSDN 操作 ...
- QT下载地址大全
1. 所有Qt版本下载地址: http://download.qt.io/archive/qt/ 2. 所有Qt Creator下载地址: http://download.qt.io/archive/ ...
- Shell 编程-常见的文件处理命令
touch 命令 touch命令用于创建空文件,例如有时应用程序希望在它们写入数据之前,某个日志文件就已经存在.这时可用touch命令创建一个空文件:touch test1:touch命令还可以用来改 ...
- 动态rem解决移动前端适配
背景 移动前端适配一直困扰很多人,我自己也是从最初的媒体查询,到后来的百分比,再到padding-top这种奇巧淫技,再到css3新单位vw这种过渡转变 但这些都或多或少会有些问题,直到使用了动态re ...
- SQL 之连接查询
概述:INNER JOIN.LEFT JOIN.LIGHT JOIN.FULL JOIN. 一.INNER JOIN INNER JOIN 关键字在表中存在至少一个匹配时返回行. 语法: select ...
- Rest架构下的增删改查
首先还是要连接一下什么是Rest, REST是英文representational state transfer(表象性状态转变)或者表述性状态转移;Rest是web服务的一种架构风格;使用HTTP, ...
- 分布式ID生成器PHP+Swoole实现(下) - 代码实现
上篇文章主要介绍<实现原理>,这篇看主要代码的编写. 实现IDGenerator类 64位ID由以下元素组成:固定位占2位,时间戳占41位,服务实例数字编号占4位,业务编号占10位,自增i ...