zoukankan      html  css  js  c++  java
  • 作业05 string

    思考问题一:

    请运行以下示例代码StringPool.Java,查看其输出结果。如何释这种输出结果?从中你能总结出什么?

    运行结果:

    true

    true

    false

    原因:

    1)在java中,内容相同的字符串常量只保存一份以节约内存,所以s0,s1,s2实际上引用的是同一个对象。

    2)编译器在编译s2一句时,会去掉“+”号,直接把两个字串连接起来得一个字串。这种优化工作由编译器自动完成。

    3)当直接使用new关键字创建字符串对象时,虽然值一致,但仍然是两个独立的对象。

    为什么会有上述的输出结果? 从中你又能总结什么?

    1)给字串变量赋值意味着:两个变量()现在引用同一个字符串对象“a”!

    2)String对象的内容是只读的,使用“+”修改s1变量的值,实际上是得到了一个新的字符串对象,其内容为“ab”,它与原先s1所引用的对象“a”无关,所以,返回false。

    3)代码中的“ab”字符串是一个常量,它所引用的字符串与s1所引用的“ab”对象无关。

    4)String.equals()方法可以比较两个字符串的内容。

    思考问题2:

    请查看String.equals()方法,学习其实现方法。

    public boolean equals(Object anObject) {
    if (this == anObject) {
    return true;
    }
    if (anObject instanceof String) {                      //判断anObject是不是String类的一个实例
    String anotherString = (String)anObject;        //把anObject赋值给anotherString
    int n = count;                                             //count是String的成员代表原始字符串长度
    if (n == anotherString.count) { 
    char v1[] = value;                                      //把原来的字符串和要比较的字符串以字符形式存入数组
    char v2[] = anotherString.value; 
    int i = offset;                                          //分别取数组下标
    int j = anotherString.offset; 
    while (n-- != 0) {                                   //遍历数组,比较 数组元素是否相同
    if (v1[i++] != v2[j++])                          //在遍历的过程中如果有不同的就返回false
    return false;


    return true;                              //相等返回true
    }
    }
    return false;                            //不是String实例返回false
    }

    思考问题3:

    整理String类的length()、charAt()、getChars()、replace()、toUpperCase()、toLowerCase()、trim()、toCharArray()使用说明。

    length():求字符串长度

    public int length()

             String s=”asfsdfwfsadf”;

             System.out.println(s.length());

    结果:12

    charAt():

    public charAt(int index)//index 是字符下标,返回字符串中指定位置的字符

            String s=”Hello”;

            System.out.println(s.charAt(3));

    结果:l

    getChars()获取从指定位置起的字串复制到字符数组中。

    四个参数的含义
    1.被拷贝字符在字串中的起始位置
    2.被拷贝的最后一个字符在字串中的下标再加1
    3.目标字符数组
    4.拷贝的字符放在字符数组中的起始下标

    getChars():public int getChars()//将字符从此字符串复制到目标字符数组

            String str = "abcdefghikl";

            Char[] ch = new char[8];

            str.getChars(2,5,ch,0);

          for(int=0;i<ch.length;i++)

             System.out.print(ch[i]);

    结果:cd

    replace():替换字符串

    public int replace()

            String s=”\”;

            System.out.println(s.replace(“\”,”///”));

    结果///;

    toUpperase():将字符串全部转换成大写

    public String toUpperCase()

             System.out.println(new String(“hello”).toUpperCase());

    toLowerCse():将字符串全部转换成小写

    public String toLowerCase()//将字符串全部转换成小写

             System.out.println(new String(“HELLO”).toLowerCase());

    trim():去两边空格

    public String trim()

             String x=”ax  c”;

             System.out.println(x.trim());//是去两边空格的方法

    toCharArray():将字符串对象中的字符转换为一个字符数组

                String x=”abcd”;

               char myChar[]=x.toCharArray();

              System.out.println(“myChar[1]”+myChar[1]);

    结果:b

    程序题

    古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:请编写一个程序,使用上述算法加密或解密用户输入的英文字串。

    1 程序设计思想

    1)定义BufferedReader的对象reader并初始化;

    2)输入字符串给aa;

    3)字符串转化为字符数组给arr;

    4)分情况加密:(1)字符是英文字母中的最后三个时,减23并赋值给字符数组;

                         (2)不是最后三个时加3并赋值给字符数组;

    5)输出字符数组

    2 流程图

    3 源代码:

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;

    public class Jiami {

    @SuppressWarnings("null")
    public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
    int i=0,n=0;
    BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));//定义BufferedReader对象

    System.out.println("请输入一个字符串:");        
    String aa=reader.readLine();//输入字符串
    n=aa.length();

    char arr[]=aa.toCharArray();//转化为字符数组

    for( i=0;i<n;i++)

    {
    if((arr[i]>=88&&arr[i]<=90)||(arr[i]>=120&&arr[i]<=122)) //如果是 x,y,z时,减23

    arr[i]=(char) (arr[i]-23);
    else
    arr[i]=(char)(arr[i]+3);         //加3
    }


    for( i=0;i<n;i++)               //输出
    System.out.print(arr[i]);
    }

    }

    4结果截图

  • 相关阅读:
    如何在Windows Forms应用程序中实现可组装式(Composite)的架构以及松耦合事件机制
    SQL Server 2008中的CDC(Change Data Capture)功能使用及释疑
    【VSTO】Office开发中遇到的兼容性检查问题
    SQL Server 2008 R2的StreamInsight 【文章转载】
    WCF技术的不同应用场景及其实现分析
    如何利用Interception简化MVVM中的Model和ViewModel的设计
    有关在SharePoint Server中Infopath表单无法呈现的问题及解决方案
    再谈谈ADO.NET Data Service 数据格式(xml和json)
    自定义Domain Service时遇到实体不能更新的问题及其解决方案
    如何在RIA Service中启用身份验证
  • 原文地址:https://www.cnblogs.com/jingxiaopu/p/5998525.html
Copyright © 2011-2022 走看看