首页 > 其他分享 >Day08-异常机制、包装类、String-StringBuffer-StringBuilder比较

Day08-异常机制、包装类、String-StringBuffer-StringBuilder比较

时间:2023-06-16 20:02:08浏览次数:55  
标签:count Day08 String int StringBuffer stringBuffer new

异常机制

异常处理5个关键字try、catch、finally、throw、throws

  • 注意点

    1. 假设要捕获多个异常,异常类型从小到大

    2. try监控区域,catch(想要捕获的异常类型!)捕获异常

    3. finally处理善后工作,可以不要finally

    4. throw 主动抛出异常

    5. throws在方法上捕获异常

 

包装类

包装类(Integer)-->String

Integer i=100;
String str1=i+"";
String str2=i.toString();
String str3=String.valueOf(i);

String-->包装类

String str4="12345";
Integer i2=Integer.parseInt(str4); //使用到自动装箱
Integer i3=new Integer(str4); //构造器  

 

String、StringBuffer、StringBuilder

  1. String

    • String实现了Serializable,说明了String可以串行化:数据可以在网络传输

    • String实现了Comparable接口,说明String对象可以比较

    • 对象用于保存字符串,也就是一组字符序列

    • “jack”字符串常量,双引号括起的字符序列

    • 字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节

    • String类有很多构造器,构造器的重载

    • String是final类,不能被继承

    • String有属性 private final char value[];用于存放字符串内容

    • value是一个final类型,不可以修改(value不能指向新的的地址,但是单个字符的内容可修改 )

扩展

String b=new String("abc");
b==b.intern();//false
b.intern()指向的是常量池的地址,b指向的是开辟的堆的地址
 
String c1=”ab“+“cd”;//常量相加,指向的是常量池
String c1=a+b;//变量相加,是在堆中  
  1. StringBuffer

  • StringBuffer实现了Serializable,可以串行化:数据可以在网络传输

  • StringBuffer的直接父类是AbstractStringBuilder

  • 在父类中 AbstractStringBuilder有属性char[] value, 不是final

  • 该value数组存放字符串内容,因此存放在堆中的

  • StringBuffer是一个final类,不能被继承

  • 因为StringBuffer字符内容是存在char[] value,所以在变化(增加/删除)不用每次都更换地址(即不是每次都创建新对象),所以效率高于String

String----》StringBuffer

String str="Hello tom";
//返回值才是StringBuffer对像,对str本身没有影响
StringBuffer stringBuffer=new StringBuffer(str);
StringBuffer stringBuffer1=new StringBuffer();
stringBuffer1 = stringBuffer1.append(str);

StringBuffer---》String

StringBuffer stringBuffer3=new StringBuffer("Hello");
String s = stringBuffer3.toString();
String s1=new String(stringBuffer3);

StringBuffer练习

从控制台输入数据,并对小数点前的数字每隔3位用逗号分隔,例如:输入123456.89后,则分隔后的结果为1,234,567.89

package 包装类;

import javax.lang.model.util.ElementScanner6;
import javax.xml.transform.Result;
import java.util.Scanner;

public class StringBufferTest {
   public static void main(String[] args) throws Exception{
       Scanner scanner = new Scanner(System.in);
       StringBuffer stringBuffer = new StringBuffer(scanner.next());
        //方法1
//       if (stringBuffer.lastlastlastIndexOf(".") % 3 == 0) {
//           int count = stringBuffer.lastlastIndexOf(".") / 3;
//           for (int i = 0; i < count - 1; i++) {
//               stringBuffer = stringBuffer.insert(stringBuffer.lastlastIndexOf(".") - (i + 1) * 3 - i, ',');
//           }
//       }
//       else {
//           if (stringBuffer.lastlastIndexOf(".") > 3) {
//               int count = stringBuffer.lastlastIndexOf(".") / 3;
//               for (int i = 0; i < count; i++) {
//                   stringBuffer = stringBuffer.insert(stringBuffer.lastlastIndexOf(".") - (i + 1) * 3 - i, ',');
//               }
//           } else if (stringBuffer.lastlastIndexOf(".") == -1) {
//               int count = stringBuffer.length() / 3;
//               for (int i = 0; i < count - 1; i++) {
//                   stringBuffer = stringBuffer.insert(stringBuffer.length() - (i + 1) * 3 - i, ',');
//               }
//           }
//
//       }
//
         
         //方法2
//       try {
//           if (Double.parseDouble(stringBuffer.toString()) >= 0) {
//               if (stringBuffer.lastIndexOf(".") == -1) {
//                   int count = stringBuffer.length() / 3;
//                   for (int i = 0; i < count - 1; i++) {
//                       stringBuffer = stringBuffer.insert(stringBuffer.length() - 4 * i - 3, ',');
//                   }
//               } else {
//                   int count = stringBuffer.lastIndexOf(".") / 3;
//                   if (stringBuffer.lastIndexOf(".") % 3 == 0) {
//                       count = count - 1;
//                   }
//                   for (int i = 0; i < count; i++) {
//                       stringBuffer = stringBuffer.insert(stringBuffer.lastIndexOf(".") - 4 * i - 3, ',');
//                   }
//               }
//               result = stringBuffer;
//               System.out.println("手机\t价格");
//               System.out.println("苹果\t" + result);
//           }
//           else {
//               System.out.println("价格数不允许小于0");
//           }
//       } catch (NumberFormatException e) {
//           System.out.println("价格输入不合法");
//           //throw new RuntimeException(e);
//
//       }

      //方法3
       for (int i=stringBuffer.lastIndexOf(".")-3;i>0;i-=3){
           int strLength=stringBuffer.length();
           //System.out.println(stringBuffer);
           stringBuffer.insert(i,",");
      }
       System.out.println(stringBuffer);
  }
}

方法1,2写法过于繁琐,建议使用方法3

注意:for(初始化表达式;条件表达式;更新表达式)再循环开始前,初始化表达式会被执行一次,因此这里的方法3,i的初始值不会跟着每次插入了“,”而跟着变化

  1. stringBuilder

  • 不是线程安全

  • 用在字符串缓冲区被单个线程使用的时候,如果可能,优先使用该类

  • 比stringBuffer要快

  • 主要操作是append和insert方法,可重载这些方法,以接受任意类型的数据

  • stringBuilder实现了Serializable,可以串行化:数据可以在网络传输

  • stringBuilder是final类,说明不能被继承

  • stringBuilder对象字符序列仍然是存放在其父类AbstractStringBuilder 的char[] value中,字符序列存放在堆中

  • stringBuilder的方法没有做互斥的处理,没有做互斥的处理,即没有synchronized关键字,在单线程的情况下使用stringBuilder

string、stringBuffer、stringBuilder比较

效率:stringBuilder>stringBuffer>string

标签:count,Day08,String,int,StringBuffer,stringBuffer,new
From: https://www.cnblogs.com/happyQueen/p/17486406.html

相关文章

  • QString::section详解
    目录section()函数简介section()声明start,end含义flags参数示例section()函数简介网上有很多关于Qt中字符串工具函数QString::section的描述,但大多描述不够清晰、直接。本文从官方文档入手,详细讲解如何使用section。QString::section可用来分隔字符串,与QString::split区别是......
  • request超出了配置的maxQueryStringLength
    整个URL的长度为966个字符,经过研究,似乎maxQueryStringLength的默认值是2048<security><requestFiltering><requestLimitsmaxQueryString="2048"></requestLimits></requestFiltering></security>在项目的根web.config中的system.we......
  • CString和char[]互转
    只有以NULL结尾的char[]才能强制转换为CString,即可以直接等于,否则需要通过Format函数char charArray[]="this C++";CString res;res.Format("%s",charArray); ......
  • js中substring
    js中substring主要用于切割字符串,我用的很少,最近再看源码的时候看到了substring,用的也比较少,积累一下例:letstr='abcdefg'str=str.substring(4);console.log(str)//输出'efg'直接截取一个想要的长度,从开头截取,并返回一个被截取之后得的值......
  • StringPtr StringPtrs 字符串指针 字符串指针切片
    funcBoolPtr(vbool)*bool{  return&v}funcStringPtr(vstring)*string{  return&v} funcStringPtrs(vals[]string)[]*string{  ptrs:=make([]*string,len(vals))  fori:=0;i<len(vals);i++{    ptrs[i]=&v......
  • Java中String类型能够存放多大的数据量?编译器只支持String只能存放65535个字符,运行时
    Java中String类型能够存放多大的数据量?https://blog.csdn.net/weixin_52707625/article/details/125583678最近在编写博客系统时,在文章上传遇到了个问题:到底使用什么来接收文章呢?String类型能接收多大的数据量?随后,我去网上找了一下,发现都是说String只能存放65535个字符啊......
  • 【最常用】两种java中的占位符的使用 第一种:使用%s占位,使用String.format转换 第二种:
    【最常用】两种java中的占位符的使用第一种:使用%s占位,使用String.format转换第二种:使用{1}占位,使用MessageFormat.format转换https://blog.csdn.net/weixin_43899069/article/details/121164107先介绍一下format是什么:Java中允许我们对指定的对象进行某种格式化,从而得到......
  • js把string转化为json
    //声明变量名为a的对象vara={a:1,b:2,c:"wangwei"};//将JSON对象转化为JSON字符,赋值给变量letstrResult=JSON.stringify(a)//查看变量strResult是什么类型typeofstrResult//'string'//JSON.parse()用于从一个字符串中解析出json对象letjsonResult=JSON.parse(str......
  • StringUtils.join()方法使用
    *StringUtils.join()方法使用打印输出:*使用StringBuilder进行拼接:张三,李四,王五*使用StringUtils.join进行拼接:张三,李四,王五*张三,李四,王五*张三&李四&王五*张三和李四和王五*手机耳机电脑packagecom.example.core.mydemo.string;importorg.apach......
  • ios NSString format 保留小数点 float double
     iosNSStringformat保留小数点floatdouble self.orderCost.text=[NSStringstringWithFormat:@"%.1f元",self.order.cost.floatValue];%.1f 表示小数点一位,%.2f表示小数点2位,依次类推.格式定义TheformatspecifierssupportedbytheNSStringformattingmethodsa......