`
青出于
  • 浏览: 12829 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Java中Integer和String浅谈

阅读更多

 

Java中的基本数据类型有八种:intcharbooleanbytelongdoublefloatshortJava作为一种面向对象的编程语言,数据在Java中也是一种对象。我们用基本数据类型创建的对象,如 int x = 0;这里的x只有值这个属性,没有(或者很少)有其他的方法。这在一些需要对数据进行操作时变的很不方便,程序员需要自己编写很多代码去实现一些常用的功能,增加了工作量及程序的大小。

所以,Java中每种基本数据类型都有其对应的引用类,或者叫封装类。如int的引用类为Integerchar 的引用类为Character。这些类是在Java的编译环境中已经事先写好的类,类中已经写有大量的,针对该数据类型的常用的方法,并且这些方法是经过优化的。在编程时,我们只需要用这些类去创建对象,就可以直接调用相应的方法。有利就有弊,在创建这些类的对象时,所用的时间和空间是要比基本数据类型大,这就提高了程序的时间复杂度和空间复杂度,所以在应用时,如果不是十分必要,尽量还是使用基本数据类型。

下面,我主要介绍Integer类中的一些方法的使用。

谈到类,首先要说的就是对象的构造方法。Java中每个类都会有构造方法,用于在创建该类的对象时调用。如方法中没有对构造方法重写,则默认格式为:类名 对象名 = new 类名();重写后则根据所传参数调用对应方法。

Integer类中重写了两种构造方法。第一种为 Integerint value),传入一个int值作为对象的值,这个方法与语句:Integer 对象名 = (int)value等价。这种方法比较好理解,就不再举例。

第二种方法为Integer(String  s) 这个方法构造一个Integer 对象,它表示 String 参数所指示的int值。使用与 parseInt 方法(对基数为 10 的值)相同的方式将该字符串转换成int值。该方法在检测到异常,即String s所包含的内容不是数字,或者不可解析的整数时,会抛出一个NumberFormatException

 

 

String s = "0101010"; 
Integer i = new Integer(s); 
System.out.println(i); 

 

  结果为:101010

 

 

String s = "dfadffcfa"; 
Integer i = new Integer(s); 
System.out.println(i); 

 

 Exception in thread "main" java.lang.NumberFormatException: For input string: "dfadffcfa"
 at java.lang.NumberFormatException.forInputString(Unknown Source)
 at java.lang.Integer.parseInt(Unknown Source)
 at java.lang.Integer.<init>(Unknown Source)

 

根据以上代码可知,这种构造方法不需要用try  catch或者throws来测试,因为该异常是Runtime型的异常,在程序运行时虚拟机会自动抛出。

 

接下来介绍几个最近在做文件压缩时用到的方法。

1、parseInt

在Integer类中,方法名为parseInt的方法有两个,所传参数不同(方法的重载)。只有一个Strirng传入的,即parseInt(String s)是将一个String中的字符进行十进制解析,返回一个static int。和上面提到的第二种构造方法一样,这个方法对于String中所含的字符也有要求,除了第一个字符可以是用来表示负值的 ASCII 减号 '-' ('\u002D') 外,字符串中的字符都必须是十进制数字。如果不符合要求,同样会在运行是报错,也是一个Runtime类型的异常。具体应用请看下面代码

 

String s = "11234516"; 
int i = Integer.parseInt(s); 
System.out.println(i);

 

输出结果为 11234516

 

String s = "112adf34516"; 
int i = Integer.parseInt(s); 
System.out.println(i);

 

Exception in thread "main" java.lang.NumberFormatException: For input string: "112adf34516"
 at java.lang.NumberFormatException.forInputString(Unknown Source)
 at java.lang.Integer.parseInt(Unknown Source)
 at java.lang.Integer.parseInt(Unknown Source) 

另一种parseInt需要传入String 和int两个参数,parseInt(String s, int radix),使用第二个参数指定的基数,将字符串参数解析为有符号的整数。除了第一个字符可以是用来表示负值的 ASCII 减号 '-' ('\u002D’)外,字符串中的字符必须都是指定基数的数字。这是一种将字符串数据按照某种进制进行转化的方法,当然前提条件是字符串中字符都满足进制的要求。

 

 

String s = "125ADF";
 int i = Integer.parseInt(s,16); 
System.out.println(i);

 

      输出结果:1202911

      异常情况就不再进行展示了。

      有将字符串转化为对应进制的整数的方法,也就有将整数按照进制转化为字符串的方法。

      toBinaryString、toOctalString、toHexString、toString都需要传入一个int,分别将该int的值转化为其二进制、八进制、十六进制、十进制的字符串,最高位不为0。

     

 

String s = Integer.toBinaryString(511); 
System.out.println(s);

 

      结果为:111111111

      以上几种方法就是在做Huffman编码的压缩时用到的Integer的方法,很有实用价值。

 

     除了这些基本数据类型的引用类型,我们最常接触到的有关数据操作的类就是String类。对于String型的数据,我们最常做的操作就是查找其中某个字符或者子字符串的索引位。这在String类中有很多的方法。Indexof(int char)返回的是指定字符在String中第一次出现的索引位,Indexof(int char,int fromIndex)则是从fromIndex位开始第一次出现char的索引位。lastIndexOf(int char)和lastIndexOf(int char,int fromIndex)正好相反,返回的是从尾到头的第一次出现的索引位。

 

 

String s = "adlfldcidfkasdcieij"; 
int index = s.indexOf("l"); 
int last = s.lastIndexOf("l"); 
System.out.println("index is :"+index); 
System.out.println("last is :"+last);

 

结果为:index is :2
          last is :4

       还经常会用到的操作就是截取字符串的某一段,得到新的字符串。String类中有substring的方法,同样也有重载现象存在。substring(int beginIndex)和substring(int beginIndex, int endIndex)得到的都是原字符串的子串,不过第一种是从beginIndex到原字符串尾,第二种则是从beginIndex到endIndex-1位的子串。这里就要注意,substring方法是含头不含尾的!

     

 

String s = "adlfldcidfkasdcieij"; 
String snew = s.substring(5); 
String str = s.substring(5,s.length()-1); 
System.out.println("snew is :"+snew); 
System.out.println("str is :"+str);

 

结果为:snew is :dcidfkasdcieij
            str is :dcidfkasdciei

 

请注意两个子串的区别。

 

 

以上就是我在压缩过程中涉及到的一些关于String类和Integer类中一些方法的使用,难免有点问题,欢迎指正。

 

3
2
分享到:
评论

相关推荐

    浅谈java 中equals和==的区别

    例如,当我们创建两个 `String` 对象 `str1` 和 `str2` 并赋值为 "abc",由于字符串字面量在Java中是常量,它们会被存储在字符串常量池中。因此,`str1` 和 `str2` 都指向常量池中的同一实例,所以 `str1 == str2` ...

    浅谈Java多线程处理中Future的妙用(附源码)

    "浅谈Java多线程处理中Future的妙用" 在Java多线程处理中,Future是一个非常重要的概念,它可以帮助我们更好地处理并发任务。Future是一个未来对象,里面保存着线程处理结果,它像一个提货凭证,拿着它你可以随时去...

    浅谈java常量池

    Java中的八种基本类型包装类(Byte、Boolean、Short、Character、Integer、Long、Float、Double)中,除了Boolean,其他七种为-128到127之间的整数值提供了常量池。这意味着,当你创建这些值的包装对象时,如果值在...

    浅谈java中字符串数组、字符串、整形之间的转换

    Java 中字符串数组、字符串、整形之间的转换 在 Java 编程中,字符串数组、字符串、整形之间的转换是非常重要的操作。今天,我们将详细介绍这些转换的实现方法。 字符串数组转字符串 在 Java 中,将字符串数组...

    浅谈在Java中使用Callable、Future进行并行编程

    在Java编程中,进行并行计算以提升程序性能是一个重要的技术。传统的并行编程方式包括继承Thread类或实现Runnable接口,但这些方法在任务完成后无法直接获取执行结果,需要通过复杂的线程同步机制来实现。从Java 1.5...

    浅谈Java中真的只有值传递么

    在Java中,对于基本数据类型(如int、double、char等)以及它们的包装类(Integer、Double等)以及String,参数传递是按值进行的。例如,在值传递的例子1中,当我们将一个int类型的变量num传递给change()方法时,...

    浅谈java中null是什么,以及使用中要注意的事项

    Java 中的 null 是一种特殊的值,它既不是对象也不是一种类型,它可以被赋值给任何引用类型,例如 Integer、Float、String 等。但是,null 不能被赋值给基本类型,例如 int、float、double 等。 null 是 Java 中的...

    浅谈Android LruCache的缓存策略

    在Android开发中,缓存策略对于提升应用性能和用户体验至关重要,尤其是在处理大量数据或资源时。本文主要讨论了Android中的LruCache缓存策略,它是一种高效的内存管理机制,尤其适用于图片或者其他大对象的缓存。 ...

    浅谈java 数据处理(int[][]存储与读取)

    在这个浅谈中,我们将讨论 Java 中 int[][] 类型的数组的存储和读取。 存储 int[][] 数组 在 Java 中,存储 int[][] 数组可以使用文件流方式,通过 FileWriter 对象将数组写入到文本文件中。在上面的代码中,我们...

    浅谈java Collection中的排序问题

    在Java编程语言中,Collection框架是处理集合数据的重要部分,其中包含了List、Set和Map三种主要的数据结构。本文将深入探讨这些数据结构在排序方面的实现和应用。 首先,我们来看List的排序。List接口提供了直接...

    浅谈Java 8 新增函数式接口到底是什么

    Java 8 中引入的函数式接口主要有四个:Function、Predicate、Supplier 和 Consumer。 1. Consumer&lt;T&gt;:消费型接口。它接受一个参数,不返回结果。它包含一个抽象方法 void accept(T t)。例如: ```java public ...

    浅谈JavaAPI 中 &lt;E&gt; 与 &lt;T&gt; 的含义

    在Java API中,`&lt;E&gt;` 和 `&lt;T&gt;` 是泛型(Generic)的占位符,用于表示不同的类型参数。泛型是Java编程语言的一个重要特性,它允许在类、接口和方法中定义类型参数,从而增加了代码的类型安全性和重用性。下面将详细...

    浅谈MyBatis-Plus学习之ActiveRecord.docx

    AR 模式的核心思想是,一个 Java 类对应数据库中的一个表,类的实例对应表中的一条记录。通过 AR,开发者可以以面向对象的方式进行数据的增删改查(CRUD)操作,无需编写大量的 SQL 语句。 在 MP 中,启用 AR 支持...

    浅谈Java与C#的一些细微差别

    - 在Java中,字符串通常使用`String`(首字母大写)定义,如`String str = "example";`。 - 而在C#中,字符串定义使用`string`(首字母小写),如`string str = "example";`。 2. **整型包装类和常量声明**: - ...

    java中equals和等号(==)的区别浅谈

    在Java编程语言中,`equals()`方法和等号`==`是用于比较对象的两种不同方式,它们在处理不同类型的数据时有不同的行为。了解这两者的区别对于编写正确的代码至关重要。 首先,我们来看Java中的数据类型。Java的数据...

    浅谈java实现重载的方法

    Java中的方法重载是面向对象编程的一个重要特性,它允许我们在同一个类中定义多个具有相同名称但参数列表不同的方法。这种技术使得代码更加简洁且易于理解,因为方法名称可以反映其功能,而不同的参数列表则指示了...

    浅谈java泛型的作用及其基本概念

    例如,`ArrayList&lt;Integer&gt;`和`ArrayList&lt;String&gt;`在运行时实际上都是`ArrayList`。这种设计使得Java的泛型成为"伪泛型",因为它们在运行时不保留类型信息,但在编译时会进行类型检查,以确保类型安全。 Java引入...

    浅谈SQLite数据库操作常用方法.docx

    String stu_table = "CREATE TABLE usertable (_id INTEGER PRIMARY KEY AUTOINCREMENT, sname TEXT, snumber TEXT)"; db.execSQL(stu_table); } ``` 3. **插入数据** 插入数据有两种方式: - 使用`insert()`...

    浅谈Java序列化和hessian序列化的差异

    Java序列化的实现机制是将要序列化的对象的元数据和业务数据全部序列化到字节流中,包括整个继承关系上的所有内容。这种机制使得Java序列化的效率较低,而生成的字节流也较大。但是,Java序列化的优点是它可以序列化...

Global site tag (gtag.js) - Google Analytics