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声 ...
随机推荐
- 认识CSS中字体图标
前端之HTML,CSS(十一) 字体图标 使用文字做出小图标的效果并超越了小图标应用精灵图,使得图标变得灵活,减少了请求次数,优化了界面的性能.字体图标本身为矢量图. 字体图标的使用过程 1.UI设计 ...
- phpspreadsheet开发手记
坑安装简单示例通过模板来生成文件释放内存单元格根据索引获取英文列设置值合并单元格居中显示宽度设置批量设置单元格格式直接输出下载自动计算列宽函数formula单元格变可点击的超链 PhpSpreadsh ...
- JavaScript设计模式-12.门面模式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- java.lang.IllegalArgumentException: Comparison method violates its general contract!
这个错误就是写比较器的时候少写了返回值的情况: 比如: Collections.sort(list, new Ordering<QtmSysUserListDto>() { @Overri ...
- C#(winform)的label自动换行
Label 是没有自动换行属性的,不像Textbox有WordWrap属性 尽管没有自动换行的属性,但也能够自动换行, 首先 AutoSize改成false; 然后调整 Label的大小,长和宽 (也 ...
- sql中字符串连接
有时候我们需要将由不同栏位获得的资料串连在一起,每一种数据库都提供一定的方法来达到这个目的,比如: MySQL: CONCAT() Oracle: CONCAT(), || SQL Server: + ...
- PTA (Advanced Level) 1022 Digital Library
Digital Library A Digital Library contains millions of books, stored according to their titles, auth ...
- 多线程并发问题解决之redis锁
一 问题背景 我们做的是医疗信息化系统,在系统中一条患者信息对医院中当前科室中的所有诊断医生是可见的,当有一个诊断医生点击按钮处理该数据时,数据的状态发生了变化,其他的医生就不可以再处理此患者的数据了 ...
- 【转】winform程序textbox滚动条保持在最下面 内容不闪烁
在开发winform程序时,会用到textbox控件来显示信息,当把textbox的Multiline属性改为Ture时(即多行显示状态),ScrollBars属性改为Vertical(内容过多时,显 ...
- HTML5--(3)过渡+动画+颜色+文本
一.过渡transition transition-property指定属性名称 (如width.height.background-color.内外边距) all 所有属性都将获得过渡效果(默认) ...