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声 ...
随机推荐
- 本地docker镜像上传Docker Hub,并且在腾讯云上pull该镜像,最后运行成功。
1:在docker hub 上注册一个账号(本人直接能注册,有的说不能),然后创建自己的仓库. 2:登录docker hub ( longdbdocker --hub账号,longdb --仓库名称) ...
- 关于Matlab串口发送HEX格式字符
终于想起来更新一下关于使用Matlab串口发送HEX格式字符.这个用法主要来自于我使用Matlab对机器人进行实时轨迹跟踪的绘制,由于底层限制,自己又不想在中间增加转换模块,就需要直接发送HEX格式指 ...
- 布局优化之ViewStub、Include、merge使用分析
布局技巧 在Android开发过程中,我们会遇到很多的问题,随着UI界面越来越多,布局的重复性.复杂度也随之增加,所幸的是,Android官方也给出了几个对布局进行优化的方法,下面根据自己的理解对官方 ...
- MySQL 连接注意事项
外连接 A LEFT JOIN B join_condition 数据表B的结果集依赖数据表A 数据表A的结果集根据左连接条件依赖所有数据表 B表除外). 左外连接条件决定如何检索数据表B(在没有指定 ...
- Java多线程(二)同步与等待唤醒
1:数据安全问题 1.1:什么情况下会出现数据安全问题? 多个线程对同一个资源进行操作,并且操作资源的语句有多条.那么这个时候这些语句因为cpu的随机性,有可能被多个线程分开执行.导致数据安全问题. ...
- Git学习系列之Git基本操作克隆项目(图文详解)
不多说,直接上干货! 想必,能进来看我写的这篇博文的朋友,肯定是了解过. 比如SVN的操作吧,最常见的是 检出(Check out ...), 更新 (Update ...), 以及 提交(Commi ...
- %notfound的理解——oracle存储过程 .
文档中的解释:It returns TRUE if an INSERT, UPDATE, or DELETE statement affected no rows, or a SELECT INTO ...
- Linux原始套接字实现分析---转
http://blog.chinaunix.net/uid-27074062-id-3388166.html 本文从IPV4协议栈原始套接字的分类入手,详细介绍了链路层和网络层原始套接字的特点及其内核 ...
- SQL Serever学习7——数据表2
修改数据表的属性 保存数据表的修改的时候,总会弹出阻止修改的警告. 解决方法2种: 1.可以使用T-sql语句强行修改 2.工具>选项>设计器>表设计器和数据库设计器>阻止保存 ...
- mvc手把手教你写excel导入[mvc+三层,没用EF]
实习狗的每天新知识日常 准备工作: 1.在项目中添加对NPOI的引用,NPOI下载地址:http://npoi.codeplex.com/releases/view/38113 2.NPOI学习系列教 ...