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声 ...
随机推荐
- compact framework windows mobile wm c#代码 创建快捷方式
已经2018年了,windows mobile已经宣布不维护狠多年了,不要问我为什么还在开发windows mobile的程序,我也不想.公司有一批手持扫描枪设备依然是windows mobile的程 ...
- Mac服务管理-Launchd(转)
背景: 在Mac下没有像Linux那样有很多的关于init方面的工具,从init的发展历史https://en.wikipedia.org/wiki/Init上可以知道,Mac使用的是Launchd作 ...
- sublime text 3 快捷键&&使用技巧
参考文章:https://github.com/jikeytang/sublime-text 这里有很多技巧http://www.jianshu.com/p/3cb5c6f2421c/ 置顶: Ctr ...
- orcale 之pl/sql例外
orcale 中的例外我们可以看作是其他编程语言中的异常,是为了增强语言的健壮性和容错性. 在orcale中常见的有以下几种: No_data_found 很容易理解就是没有数据返回. Too_man ...
- PHP之string之addslashes()函数使用
addslashes (PHP 4, PHP 5, PHP 7) addslashes - Quote string with slashes addslashes - 使用反斜线引用字符串 Desc ...
- *2.3.3-加入monitor
验证平台必须监测DUT的行为,只有知道DUT的输入输出信号变化之后,才能根据这些信号变化来判定DUT的行为是否正确. 验证平台中实现监测DUT行为的组件是monitor.driver负责把transa ...
- Linux环境进程间通信(二): 信号--转载
http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html http://www.ibm.com/developerworks ...
- 去除inline-block之间的空白
做一个水平排列的导航通常有以下几种布局: 1.给一个浮动. 2.设置display为inline. 3.设置display为inline-block. 但要追求代码量最少的话,设置为inline元素或 ...
- 第8章 scrapy进阶开发(2)
8-4 selenium集成到scrapy中 其实也没什么好说的直接上代码 这是在middlewares.py中定义的一个class: from selenium.common.exceptions ...
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(三)——使用Flask-Login库实现登录功能
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...