飞翔的起点

从这里出发

导航

<2009年9月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

统计

常用链接

留言簿(5)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜

2009年9月23日 #

Queue

public class QuenDemo {
  public static void main(String[] args){
   //public class Queue extends Collection
   Queue<Integer> queue=new LinkedList<Integer>();
   Random  rand = new Random(47);
   for(int i=0;i<10;i++){
    queue.offer(rand.nextInt(i+10));
   }
   System.out.println("1111"+queue.toString());
   printQ(queue);
   //public class LinkedList extends AbstractSequentialList implements List,Queue,Cloneable,Serializable
   Queue<Character> qc=new LinkedList<Character>();
   for(char c:"guoxzh".toCharArray()){
    qc.offer(c);
    System.out.println("qc=="+qc.toString());
   }
    printQ(qc);
  }
  
  public static void printQ(Queue queue){
   while(queue.peek()!=null){
    //peek和element都是在不移除的情况下返回对头,但是peek在队列为空的情况下返回null,element方法会抛出NoSuchElementException异常
    System.out.println(queue.remove());
    //remove和poll方法都是在移除并返回对头,但是poll在为空时返回null,而remove会抛出NoSucheElementException异常
    System.out.println("2222"+queue.toString());
   }
  }
}

posted @ 2009-10-18 18:29 forgood 阅读(201) | 评论 (0)编辑 收藏

java中的编码方法

package src;

import java.io.UnsupportedEncodingException;

public class ChangeCharset {
  /** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块 */
  public static final String US_ASCII = "US-ASCII";

  /** ISO 拉丁字母表 No.1,也叫作 ISO-LATIN-1 */
  public static final String ISO_8859_1 = "ISO-8859-1";

  /** 8 位 UCS 转换格式 */
  public static final String UTF_8 = "UTF-8";

  /** 16 位 UCS 转换格式,Big Endian(最低地址存放高位字节)字节顺序 */
  public static final String UTF_16BE = "UTF-16BE";

  /** 16 位 UCS 转换格式,Little-endian(最高地址存放低位字节)字节顺序 */
  public static final String UTF_16LE = "UTF-16LE";

  /** 16 位 UCS 转换格式,字节顺序由可选的字节顺序标记来标识 */
  public static final String UTF_16 = "UTF-16";

  /** 中文超大字符集 */
  public static final String GBK = "GBK";

  /**
   * 将字符编码转换成US-ASCII码
   */
  public String toASCII(String str) throws UnsupportedEncodingException{
   return this.changeCharset(str, US_ASCII);
  }
  /**
   * 将字符编码转换成ISO-8859-1码
   */
  public String toISO_8859_1(String str) throws UnsupportedEncodingException{
   return this.changeCharset(str, ISO_8859_1);
  }
  /**
   * 将字符编码转换成UTF-8码
   */
  public String toUTF_8(String str) throws UnsupportedEncodingException{
   return this.changeCharset(str, UTF_8);
  }
  /**
   * 将字符编码转换成UTF-16BE码
   */
  public String toUTF_16BE(String str) throws UnsupportedEncodingException{
   return this.changeCharset(str, UTF_16BE);
  }
  /**
   * 将字符编码转换成UTF-16LE码
   */
  public String toUTF_16LE(String str) throws UnsupportedEncodingException{
   return this.changeCharset(str, UTF_16LE);
  }
  /**
   * 将字符编码转换成UTF-16码
   */
  public String toUTF_16(String str) throws UnsupportedEncodingException{
   return this.changeCharset(str, UTF_16);
  }
  /**
   * 将字符编码转换成GBK码
   */
  public String toGBK(String str) throws UnsupportedEncodingException{
   return this.changeCharset(str, GBK);
  }
 
  /**
   * 字符串编码转换的实现方法
   * @param str  待转换编码的字符串
   * @param newCharset 目标编码
   * @return
   * @throws UnsupportedEncodingException
   */
  public String changeCharset(String str, String newCharset)
    throws UnsupportedEncodingException {
   if (str != null) {
    //用默认字符编码解码字符串。
    byte[] bs = str.getBytes();
    //用新的字符编码生成字符串
    return new String(bs, newCharset);
   }
   return null;
  }
  /**
   * 字符串编码转换的实现方法
   * @param str  待转换编码的字符串
   * @param oldCharset 原编码
   * @param newCharset 目标编码
   * @return
   * @throws UnsupportedEncodingException
   */
  public String changeCharset(String str, String oldCharset, String newCharset)
    throws UnsupportedEncodingException {
   if (str != null) {
    //用旧的字符编码解码字符串。解码可能会出现异常。
    byte[] bs = str.getBytes(oldCharset);
    //用新的字符编码生成字符串
    return new String(bs, newCharset);
   }
   return null;
  }

  public static void main(String[] args) throws UnsupportedEncodingException {
   ChangeCharset test = new ChangeCharset();
   String str = "This is a 中文的 String!";
   System.out.println("str: " + str);
   String gbk = test.toGBK(str);
   System.out.println("转换成GBK码: " + gbk);
   System.out.println();
   String ascii = test.toASCII(str);
   System.out.println("转换成US-ASCII码: " + ascii);
   gbk = test.changeCharset(ascii,ChangeCharset.US_ASCII, ChangeCharset.GBK);
   System.out.println("再把ASCII码的字符串转换成GBK码: " + gbk);
   System.out.println();
   String iso88591 = test.toISO_8859_1(str);
   System.out.println("转换成ISO-8859-1码: " + iso88591);
   gbk = test.changeCharset(iso88591,ChangeCharset.ISO_8859_1, ChangeCharset.GBK);
   System.out.println("再把ISO-8859-1码的字符串转换成GBK码: " + gbk);
   System.out.println();
   String utf8 = test.toUTF_8(str);
   System.out.println("转换成UTF-8码: " + utf8);
   gbk = test.changeCharset(utf8,ChangeCharset.UTF_8, ChangeCharset.GBK);
   System.out.println("再把UTF-8码的字符串转换成GBK码: " + gbk);
   System.out.println();
   String utf16be = test.toUTF_16BE(str);
   System.out.println("转换成UTF-16BE码:" + utf16be);
   gbk = test.changeCharset(utf16be,ChangeCharset.UTF_16BE, ChangeCharset.GBK);
   System.out.println("再把UTF-16BE码的字符串转换成GBK码: " + gbk);
  }
}

posted @ 2009-09-23 14:25 forgood 阅读(291) | 评论 (0)编辑 收藏

byte数组和String之间的转化

JAVA里面关于byte数组和String之间的转换问题

把byte转化成string,必须经过编码

例如下面一个例子:

import java.io.UnsupportedEncodingException;

public class test{
 public static void main(String g[]) {
  String s = "12345abcd";
  byte b[] = s.getBytes();
  String t = b.toString();

  System.out.println(t);

 }
}
输出字符串的结果和字符串s不一样了.

经过以下方式转码就可以正确转换了:

public class test{
 public static void main(String g[]) {
  String s = "12345abcd";
  byte b[] = s.getBytes();
  try {
   String t = new String(b);
   System.out.print(t);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

引用:
String   str   =   "String"; 
          byte[]   byte1   =   str.getBytes(); 
          String   str1   =   new   String(byte1); 
          byte[]   byte2   =   str1.getBytes(); 
          String   str2   =   new   String(byte2); 
          System.out.println("str<<<"   +   str); 
          System.out.println("byte1<<<"   +   byte1); 
          System.out.println("str1<<<"   +   str1); 
          System.out.println("byte2<<<"   +   byte2); 
          System.out.println("str2<<<"   +   str2); 
  ------------------------------------- 
  输出结果 
  str<<<String 
  byte1<<<[B@192d342 
  str1<<<String 
  byte2<<<[B@6b97fd 
  str2<<<String 
  
  想请教为什么两个byte输出的不一样呢? 
 

String   str   =   "String"; 
          byte[]   byte1   =   str.getBytes(); 
          String   str1   =   new   String(byte1); 
          byte[]   byte2   =   str1.getBytes(); 
  ---------- 
  注意byte1是str得到的byte数组,而byte2是另一个字符串str1得到的数组 
  他们本身也是两个对象  
   
  直接打印实际上调用的是toString()方法,而toString()的默认实现是打印对象类型+hashCode()  
  [B表示byte数组  @表示之后的是地址  后面跟着的是hashCode,其实就是其虚拟机地址  
  

posted @ 2009-09-23 14:19 forgood 阅读(3056) | 评论 (0)编辑 收藏