API,String类

来源:互联网 发布:淘宝转微信链接要钱么 编辑:程序博客网 时间:2024/06/03 08:28

 黑马程序员

---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

 

1.  什么是API

   API全名:Application Programming Interface,API是应用程序编程接口,指一些预先定义好的类。

   例如我们想要一台电脑,并不需要自己生产每个零件,只要从各个厂商买到组装电脑的零件就可以,然后根据说明书学会使用,将零件安装在一起就得到了电脑。电脑就像是我们要的程序,而零件就是API,说明书就是帮助文档。

2.   Java API

    Java API就是Sun公司提供给我们使用的类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用。

    我们可以通过查帮助文档来了解Java提供的API如何使用

3.   Java中常用API

    String类

              对字符串进行操作通常我们使用String类,相关的还有StringBuffer和StringBuilder

    集合类

              集合是一种容器,用来存取对象(Collection、Map)

    包装类

              Java定义了一组包装类对基本数据类型进行了包装(Integer、Double、Boolean)

    时间对象

              Java定义了一些类方便用户对时间、日期进行处理(Date、Calendar) 

    系统类

              Java定义了一些类针对系统进行操作(System、Runtime)  

    IO流

              Java定义了一些类对数据传输进行了封装(输入输出流、File文件对象)

   Socket

              Java定义了一些类方便用户进行网络编程(Socket、DatagramSocket)

4.   String对象的存储

    字符串是常量,一旦创建不能被修改。

  字符串在程序中经常使用,虚拟机会将其缓存在String池中。

    了解 String s = “abc” 和 String s = new String(“abc”) 的区别。

 

 

class StringDemo
{
 public static void main(String[] args)
 {
  /*
  String s1 = "abc";//s1是一个类类型变量, "abc"是一个对象。
      //字符串最大特点:一旦被初始化就不可以被改变。

  String s2 = new String("abc");

  //s1和s2有什么区别?
  //s1在内存中有一个对象。
  //s2在内存中有两个对象。
  

 


  System.out.println(s1==s2);
  System.out.println(s1.equals(s2));//String类复写了Object类中equals方法,
          //该方法用于判断字符串是否相同。

  */

  String s = "abcde";
  method_1(s);
 }

 /*
 String类是对字符串事物的描述。
 该类定义了专门用于操作字符串的方法。
 "abc":
 */

 public static void method_1(String s)
 {
  char ch = s.charAt(3);

  System.out.println("ch="+ch);
  int num = s.codePointAt(3);

  System.out.println("num="+num);

  String s1 = "qq";
  s1 = s1.concat("mm");

  System.out.println("s1="+s1);
  System.out.println("qq"+"mm");

  String a = "opq";
  String b = "opq";
  System.out.println("a==b:"+(a==b));


 }
}

 

 

5.   String类的构造函数

    String(byte[] bytes)

通过指定字节数组构建字符串。

    String(byte[] bytes, int offset, int length)

通过指定字节数组、数组元素偏移量和元素个数构建字符串。

    String(byte[] bytes, String charsetName)

通过指定字节数组和指定码表构建字符串。

   String(byte[] bytes, int offset, int length, String charsetName)

通过指定字节数组、数组元素偏移量、元素个数和指定码表构建字符串。

    String(char[] value)

通过指定字符数组构建字符串。

   String(char[] value, int offset, int count)

通过指定字符数组、数组元素偏移量和元素个数构建字符串。

   String(StringBuffer buffer)

通过指定StringBuffer构建字符串。

    String(StringBuilder builder)

通过指定StringBuffer构建字符串。

 

 


import java.io.UnsupportedEncodingException;

public class StringConstructor {

 public static void main(String[] args) throws UnsupportedEncodingException {
  //  test1();  // alt + shift + m
  //  test2();
  //  test3();
  //  test4();
  //  test5();
  

  //  test6();
 }

 private static void test6() {
  String s1 = "abc";
  Person p1 = new Person();
  String s2 = s1 + p1;  // 使用字符串和一个对象相加的时候, 是和该对象的toString()返回值相加
  System.out.println(s2);
 }

 private static void test5() {
  StringBuilder sb = new StringBuilder(); // StringBuffer 线程安全, StringBuilder 速度快
  sb.append("abc");
  sb.append("xxx");
  String s = new String(sb);
  System.out.println(s);
 }

 private static void test4() {
  String s1 = "abc中文";
  char[] arr = s1.toCharArray(); // 将字符串转为字符数组
  for (int i = 0; i < arr.length; i++)
   System.out.println(arr[i]);

  String s2 = new String(arr, 3, 2);
  System.out.println(s2);
 }

 private static void test3() throws UnsupportedEncodingException {
  byte[] arr = { -28, -72, -83, -26, -106, -121 };
  String s = new String(arr, 3, 3, "UTF-8"); // 从字节数组中使用一部分字节转为字符串
  System.out.println(s);
 }

 private static void test2() throws UnsupportedEncodingException {
  String s1 = "中文";
  byte[] arr = s1.getBytes("UTF-8"); // 使用指定码表转为byte数组
  for (int i = 0; i < arr.length; i++)
   System.out.println(arr[i]);

  String s2 = new String(arr, "UTF-8"); // 使用指定码表将byte数组转为String
  System.out.println(s2);
 }

 private static void test1() {
  String s1 = "abc";
  String s2 = new String("abc");

  byte[] arr = s1.getBytes(); // 使用平台默认码表将字符串转为字节数组
  for (int i = 0; i < arr.length; i++)
   System.out.println(arr[i]);

  String s3 = new String(arr); // 使用平台默认码表将字节数组转为字符串
  System.out.println(s3);
 }

}


class Person {
 public String toString() {
  return "重写的toString";
 }
}

 

 

 

 

 

 

 

 

 

 

public class StringMethod {

 public static void main(String[] args) {
  //  test1();  // 查找某个位置的字符
  //  test2();  // 查找字符所在位置
  //  test3();  // 字典顺序比较
  //  test4();  // 截取子串
  //  test5();  // 分割
  //  test6();  // 替换
  //  test7();  // 去掉前后空白
  //  test8();  // 连接
  //  test9();  // 包含
  //  test10();  // 开始和结尾
  //  test11();  // 长度
  //  test12();  // 大小写转换

  //  test13();
 }

 private static void test13() {
  String s = "abc";
  System.out.println(s.replace("a", "x"));
  System.out.println(s.concat("def"));
  System.out.println(s.substring(0, 1));
  System.out.println(s);  // String类的所有方法, 都不会改变原有字符串
 }

 private static void test12() {
  System.out.println("aBc".toLowerCase());
  System.out.println("aBc".toUpperCase());
 }

 private static void test11() {
  // System.out.println("abc".isEmpty());  // JDK6
  // System.out.println("".isEmpty());
  System.out.println("abc".length());
  System.out.println("".length());
 }

 private static void test10() {
  System.out.println("test.java".endsWith(".java"));
  System.out.println("test.java.txt".endsWith(".java"));
  System.out.println("test.java".startsWith("test"));
  System.out.println("test.java".startsWith("t"));
 }

 private static void test9() {
  System.out.println("abc".contains("bc"));
  System.out.println("abc".contains("bca"));
  System.out.println("abc".contains("abc"));
  System.out.println("abc".contains("abcd"));
  System.out.println("abc".contains("a"));
  System.out.println("abc".contains("aa"));
 }

 private static void test8() {
  System.out.println("abc".concat("def"));
 }

 private static void test7() {
  String s = "   ab c  ";

  System.out.println("--" + s + "--");
  System.out.println("--" + s.trim() + "--");
 }

 private static void test6() {
  String s = "abcabc";
  System.out.println(s.replace('a', 'A'));
  System.out.println(s.replace("ab", "xx"));
  StringBuilder sb = new StringBuilder();
  sb.append("xyz");
  System.out.println(s.replace("a", sb));
 }

 private static void test5() {
  String s1 = "abc,def,xx,oo";
  String[] arr = s1.split(","); // 正则表达式
  for (int i = 0; i < arr.length; i++)
   System.out.println(arr[i]);
 }

 private static void test4() {
  String s1 = "abcdefghijklmnopqrstuvwxyz";
  System.out.println(s1.substring(3));
  System.out.println(s1.substring(3, 6)); // 截取子串, 开始索引包括, 结束索引不包括
  System.out.println(s1.substring(25, 26));
 }

 private static void test3() {
  String s1 = "acd";
  String s2 = "abc";
  System.out.println(s1.compareTo(s2)); // 按照码表值比较, 以第一个不同的字符为准

  String s3 = "abcccc";
  String s4 = "ab";
  System.out.println(s3.compareTo(s4)); // 如果是包含关系, 那么返回长度差值

  System.out.println("abc".compareToIgnoreCase("Abc")); // 忽略大小写
 }

 private static void test2() {
  String s = "abcdefabcdef";
  int findIndex = s.indexOf('b'); // 找到'b'在字符串s中第一次出现的位置
  System.out.println(findIndex);
  System.out.println(s.indexOf('b', findIndex + 1)); // 从findIndex+1的位置继续找

  System.out.println(s.lastIndexOf('b')); // 查找最后一次出现的位置

 }

 private static void test1() {
  String s = "abcdef";
  System.out.println(s.charAt(5)); // 查找字符串s中5号索引上的字符
 }

}

 

 

 

 

   查找两个字符串中最大相同子串.


public class Test6 {

 public static void main(String[] args) {
  findMaxSubstring("XXXabcdXXX", "X abc d");
 }

 /*
  * 查找两个字符串的最大相同子串
  *
  * 找出s2中的所有子串
  */
 private static void findMaxSubstring(String s1, String s2) {
  for (int i = 0; i < s2.length(); i++) { // 循环s2.length()次
   for (int j = 0; j < i + 1; j++) {
    String substring = s2.substring(j, s2.length() - i + j);
    if(s1.contains(substring)){
     System.out.println(substring);
     return;
    }
   }
  }
 }
}

 

 

 

 

 

 

6.   String类的常用方法

    char charAt(int index)

查找指定位置的字符

    int indexOf(String str)

判断字符串出现的位置

    int compareTo(String anotherString)

按字典顺序比较两个字符串

    String substring(int beginIndex, int endIndex)

截取子字符串       

    String[] split(String regex)

字符分割

    String replace(CharSequence target, CharSequence replacement)

替换字符串

    String trim()

去掉字符串前后空白

      

 

    字符串练习

    设计一个方法, 获取一个已知文件名的扩展名.

Person.java的扩展名是.java,Person.java.txt的扩展名是.txt

public class Test1 {

 public static void main(String[] args) {
  System.out.println(getExtname("Person.java"));
  System.out.println(getExtname("Person.java.txt"));
 }

 /*
  * 接收一个文件名, 返回扩展名
  * Person.java --> java
  * Person.java.txt --> txt
  */
 private static String getExtname(String filename) {
  // 查找最后一个"."
  int index = filename.lastIndexOf(".");
  // 从这个位置后面开始截取
  return filename.substring(index + 1);
 }

}

 

 

    设计一个方法, 查找一个字符串中子字符串出现的所有位置.

public class Test2 {

 public static void main(String[] args) {
  indexOf("abcxxabc", "abc");
 }

 /*
  * 在s1中查找s2出现的所有位置
  */
 private static void indexOf(String s1, String s2) {
  // 开始查找的位置
  int startIndex = 0;

  while (true) {
   // 从这个位置开始找
   int findIndex = s1.indexOf(s2, startIndex);

   // 如果没找到就结束循环
   if (findIndex == -1)
    break;

   // 如果找到了, 就打印, 并且将开始位置赋值为这个找到的位置
   System.out.println(findIndex);
   startIndex = findIndex + s2.length(); // 字符串的长度是length()方法, 数组的长度是length属性
  }
 }

}

 

 

   查找一个字符串中出现最多的字符.

“hello world”中L出现了3次

 

public class Test3 {

 public static void main(String[] args) {  // alt + shift + m
  System.out.println(findMostChar1("hello world"));
  System.out.println(findMostChar1("hello world  aaaa"));
  System.out.println(findMostChar1("hello world xxxxxx"));
 }

 private static ReturnValue findMostChar1(String s) {
  int mostTimes = 0; // 用来记住出现次数最多得字符的次数
  char mostChar = 0; // 用来记住出现次数最多的字符
  while (s.length() > mostTimes) {
   char c = s.charAt(0); // 获取第一个字符
   int times = 0; // 用来记住这个字符的次数
   for (int i = 0; i < s.length(); i++)
    // 再循环遍历字符串每一个字符
    if (c == s.charAt(i)) // 如果找到相同的
     times++; // 就将次数加1
   if (times > mostTimes) { // 如果当前的次数是否大于最多的次数
    mostTimes = times; // 记住这个次数
    mostChar = c; // 记住这个字符
   }
   s = s.replace(c + "", ""); // 将当前字符替换为空, 也就是将这个字符从字符串中删除
  }
  return new ReturnValue(mostChar, mostTimes); // 循环结束之后, 返回最多的字符和次数
 }

 /*
  * 查找s字符串中出现次数最多的字符
  *   “hello world”中L出现了3次
  */
 private static char findMostChar(String s) {
  int mostTimes = 0; // 用来记住出现次数最多得字符的次数
  char mostChar = 0; // 用来记住出现次数最多的字符
  for (int j = 0; j < s.length(); j++) { // 循环遍历每一个字符
   char c = s.charAt(j); // 获取其中一个字符
   int times = 0; // 用来记住这个字符的次数
   for (int i = 0; i < s.length(); i++)
    // 再循环遍历字符串每一个字符
    if (c == s.charAt(i)) // 如果找到相同的
     times++; // 就将次数加1
   if (times > mostTimes) { // 如果当前的次数是否大于最多的次数
    mostTimes = times; // 记住这个次数
    mostChar = c; // 记住这个字符
   }
  }
  return mostChar; // 循环结束之后, mostChar将记住最多的字符
 }
}

class ReturnValue {
 private char c;
 private int times;

 public ReturnValue(char c, int times) {
  this.c = c;
  this.times = times;
 }

 public String toString() {
  return "次数最多的字符是: " + c + ", 次数为: " + times;
 }
}

 

 

 

   

设计方法,使用System.in.read()读取一行.

import java.io.IOException;

public class Test4 {

 public static void main(String[] args) throws IOException {
  while (true) {
   String line = readLine();
   System.out.println(line);
   if ("bye".equals(line))
    break;
  }
 }

 /*
  * 使用System.in.read()读取键盘输入的一行字符串
  */
 private static String readLine() throws IOException {
  StringBuilder sb = new StringBuilder();   // 定义一个容器
  while (true) {
   byte b = (byte) System.in.read();    // 从键盘输入读一个字节
   if (b == '\n')         // 如果是\n, 代表行末尾, 结束循环
    break;
   if (b == '\r')         // 如果是\r, 不存
    continue;
   if (b < 0) {        // 小于0代表遇到了中文
    byte b1 = (byte) System.in.read();  // 再读一个
    byte[] arr = {b, b1};     // 把两个字节转为数组
    String s = new String(arr);    // 将数组转为字符串
    sb.append(s);       // 添加到容器
   } else
    sb.append((char) b);  // 其他字符则存入容器
  }
  return sb.toString();   // 将容器中内容转回字符串返回
 }

}

 

 

 

 

 

 

循环读取一个字节,读取到\r\n结束。考虑中文问题

    设计一个方法,可以从一个字符串中打印n个字节. 但不能打印出半个中文.

短信一次发送字节140个,如果超过140字节就会分为两条。这时如果第140个字节是中文的前半,那么第一条短信应该发送139字节。

 

 


public class Test5 {

 public static void main(String[] args) {
  print1("abc中文", 3);
  print1("abc中文", 4);
  print1("abc中文", 5);
 }

 /*
  * 从字符串s中打印n个字节, 如果最后一个字节是中文的前一半, 则不打印
  * GBK码表中, 中文第一个字节是负数, 第二个字节可正可负
  *
  * 我们需要判断要打印的最后一个字节是否是中文的前一半, 如果是则将count-1
  * 如果当前的字节是负数, 并且前一个不是中文前一半, 那么当前的就是中文前一半
  */
 private static void print(String s, int count) {
  byte[] arr = s.getBytes(); // 将字符串转为字节数组
  boolean isCnBegin = false; // 代表前一个字节是否是中文的前一半
  for (int i = 0; i < count; i++)
   isCnBegin = arr[i] < 0 && !isCnBegin;
  System.out.println(new String(arr, 0, isCnBegin ? count - 1 : count)); // 将字节数组转为字符串
 }

 // 判断字符串中指定索引处是否是中文的前一半
 // 0号字节如果小于0, 那么就是中文前一半
 // 如果查找的是第一个字节, 那么就判断第一个字节是否小于0
 // 如果查找的不是第一个字节, 就看 当前字节是否小于0 并且 前一个字节是否不是中文前半
 private static boolean isCnBegin(String s, int index) {
  return index == 0 ? s.getBytes()[0] < 0 : (s.getBytes()[index] < 0 && !isCnBegin(s, index - 1));
 }
 
 private static void print1(String s, int count) {
  System.out.println(new String(s.getBytes(), 0, isCnBegin(s, count - 1) ? count-1 : count));
 }

}

 

 

 

 

/*

String类适用于描述字符串事物。
那么它就提供了多个方法对字符串进行操作。

常见的操作有哪些?
"abcd"

1,获取。
 1.1 字符串中的包含的字符数,也就是字符串的长度。
  int length():获取长度。
 1.2 根据位置获取位置上某个字符。
  char charAt(int index):
 1.3 根据字符获取该字符在字符串中位置。
  int indexOf(int ch):返回的是ch在字符串中第一次出现的位置。
  int indexOf(int ch, int fromIndex) :从fromIndex指定位置开始,获取ch在字符串中出现的位置。

  int indexOf(String str):返回的是str在字符串中第一次出现的位置。
  int indexOf(String str, int fromIndex) :从fromIndex指定位置开始,获取str在字符串中出现的位置。

  int lastIndexOf(int ch) :

  
2,判断。
 2.1 字符串中是否包含某一个子串。
  boolean contains(str):
  特殊之处:indexOf(str):可以索引str第一次出现位置,如果返回-1.表示该str不在字符串中存在。
    所以,也可以用于对指定判断是否包含。
    if(str.indexOf("aa")!=-1)

    而且该方法即可以判断,有可以获取出现的位置。

 2.2 字符中是否有内容。
  boolean isEmpty(): 原理就是判断长度是否为0.
 2.3 字符串是否是以指定内容开头。
  boolean startsWith(str);
 2.4 字符串是否是以指定内容结尾。
  boolean endsWith(str);
 2.5 判断字符串内容是否相同。复写了Object类中的equals方法。
  boolean equals(str);
 2.6 判断内容是否相同,并忽略大小写。
  boolean equalsIgnoreCase();
 
3,转换。
 3.1 将字符数组转成字符串。
  构造函数:String(char[])
      String(char[],offset,count):将字符数组中的一部分转成字符串。

  静态方法:
    static String copyValueOf(char[]);
    static String copyValueOf(char[] data, int offset, int count)

    static String valueOf(char[]):

  
 3.2 将字符串转成字符数组。**
  char[] toCharArray():

 3.3 将字节数组转成字符串。
   String(byte[])
   String(byte[],offset,count):将字节数组中的一部分转成字符串。

 3.4 将字符串转成字节数组。
   byte[]  getBytes():
 3.5 将基本数据类型转成字符串。
  static String valueOf(int)
  static String valueOf(double)

  //3+"";//String.valueOf(3);

  特殊:字符串和字节数组在转换过程中,是可以指定编码表的。

4,替换
 String replace(oldchar,newchar);

5,切割
 String[] split(regex);

6,子串。获取字符串中的一部分。
 String substring(begin);
 String substring(begin,end);

7,转换,去除空格,比较。
 7.1 将字符串转成大写或则小写。
   String toUpperCase();
   String toLowerCase();

 7.2 将字符串两端的多个空格去除。
  String trim();

 7.3 对两个字符串进行自然顺序的比较。
  int compareTo(string);


*/

class  StringMethodDemo
{

 public static void method_7()
 {
  String s = "    Hello Java     ";
  sop(s.toLowerCase());
  sop(s.toUpperCase());
  sop(s.trim());

  String s1 = "a1c";
  String s2 = "aaa";

  sop(s1.compareTo(s2));
 }
 public static void method_sub()
 {
  String s = "abcdef";

  sop(s.substring(2));//从指定位置开始到结尾。如果角标不存在,会出现字符串角标越界异常。
  sop(s.substring(2,4));//包含头,不包含尾。s.substring(0,s.length());
 }

 public static void  method_split()
 {
  String s = "zhagnsa,lisi,wangwu";

  String[] arr  = s.split(",");

  for(int x = 0; x<arr.length; x++)
  {
   sop(arr[x]);
  }
 }

 public static void method_replace()
 {
  String s = "hello java";

  //String s1 = s.replace('q','n');//如果要替换的字符不存在,返回的还是原串。


  String s1 = s.replace("java","world");
  sop("s="+s);
  sop("s1="+s1);
 }

 public static void method_trans()
 {
  char[] arr = {'a','b','c','d','e','f'};

  String s= new String(arr,1,3);

  sop("s="+s);

  String s1 = "zxcvbnm";

  char[] chs = s1.toCharArray();

  for(int x=0; x<chs.length; x++)
  {
   sop("ch="+chs[x]);
  }
 }
 public static void method_is()
 {
  String str = "ArrayDemo.java";
  
  //判断文件名称是否是Array单词开头。
  sop(str.startsWith("Array"));
  //判断文件名称是否是.java的文件。
  sop(str.endsWith(".java"));
  //判断文件中是否包含Demo
  sop(str.contains(".java"));


 }


 public static void method_get()
 {
  String str = "abcdeakpf";

  //长度
  sop(str.length());

  //根据索引获取字符。
  sop(str.charAt(4));//当访问到字符串中不存在的角标时会发生StringIndexOutOfBoundsException。


  //根据字符获取索引
  sop(str.indexOf('m',3));//如果没有找到,返回-1.
  
  //反向索引一个字符出现位置。
  sop(str.lastIndexOf("a"));

  
 }
 public static void main(String[] args)
 {
  method_7();
//  method_trans();
//  method_is();
//  method_get();
  /*
  String s1 = "abc";
  String s2 = new String("abc");

  String s3 = "abc";
  System.out.println(s1==s2);
  System.out.println(s1==s3);

  */
 }

 public static void sop(Object obj)
 {
  System.out.println(obj);
 }


}

 

 

 

 

 

 

 

 

 

 

 

 

 

------------ <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! -----------

原创粉丝点击