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结果截图

  • 相关阅读:
    iot 表索引dump《2》
    heap表和iot表排序规则不同
    Cannot complete the install because one or more required items could not be found.
    iot表输出按主键列排序,heap表不是
    iot 表主键存放所有数据,且按数据插入顺序排序
    iot表和heap表排序规则不同
    org.eclipse.graphiti.ui.editor.DiagramEditorInput.
    Oracle 排序规则
    perl 异步超时 打印错误
    14.6.3 Grouping DML Operations with Transactions 组DML操作
  • 原文地址:https://www.cnblogs.com/jingxiaopu/p/5998525.html
Copyright © 2011-2022 走看看