SiteMap

ラベル java の投稿を表示しています。 すべての投稿を表示
ラベル java の投稿を表示しています。 すべての投稿を表示

2014年3月25日火曜日

Java - String 與 Int 互轉, String 與 Char[] 互轉


In Java

假設有個 char[]

String to int

String str = "1234"

int str2int = Integer.parseInt(str); // 會得到 1234, 如果要印出 a(或者中文字) 的 ASCII 碼的話
int str2int = Integer.valueOf(str); // 請用 sysout((int)'a');
int str2int = Integer.valueOf(str).intValue();

int to String

int value = 100;
String str = String.valueOf(i);
String str = Integer.toString(i); // 繼承自 Object 的 Method, 效果同方法名稱一樣
String str = "" + i; // 我喜歡用這個, 很方便

String to char[]

String str = "asdf";
char[] charArr = str.toCharArray();

char[] to String

char[] charArr = {'出', '包', '真', '好', '看'};
String str = new String(charArr);

PS.
要印出 char[] 裡面東西的話
sysout( charArr ); 就可以了

但是如果加上一段字串的話, charArr的部分只會印出記憶體位址
sysout("呵呵" + charArr); // charArr 只會印出在記憶體裡面的位址

sysout("呵呵" +  new String(charArr)); // 這樣才會把字串跟 charArr[] 完整印出來

Ref.
Eng    Tai          Chi
bit,     位元,      位
Byte,  位元組,   字節
char,   字元,      字符
word,  字,         字組

Bit rate 位元率  比特率

中文詞彙地區差異比較——#11「字節」與「位元組」
https://www.byvoid.com/blog/region-phrases-comparison-byte/
字节
http://baike.baidu.com/view/60408.htm#2_4
C++字串與字元陣列的互轉
http://blog.xuite.net/oldcat.wu/OBProgram/63748495-%E5%AD%97%E4%B8%B2%E8%88%87%E5%AD%97%E5%85%83%E9%99%A3%E5%88%97%E7%9A%84%E4%BA%92%E8%BD%89

2014年3月20日木曜日

Detect Doc Encoding

BOM: Byte Order Mark

UTF-8
-17, -68, -65
 EF, BB, BF


Java 讀取Big5編碼轉換成UTF8


String s="政府會好好把關,輕輕檢查";
new String(s.getBytes("BIG5"),"UTF8");
###Java 中我們可以使用String.getBytes("指定編碼")讀取出字串編碼byte,在使用new String(bytes,"新編碼")來轉換成需要的編碼字串。使用BIG5來獨區依然會造成部份自無法轉成UTF8正常顯示。
解決方法: 使用MS950或CP950來解碼
s=new String(s.getBytes("MS950"),"UTF8");

但是要讀取文件的話, 必須要先知道文件的編碼方式是用了甚麼來編碼

在java中常常遇到文件讀寫的問題,有時候需控制讀寫文件的編碼格式
方法如下:

讀取文件

假設你要讀取的文件是用 UTF-8 來編碼
FileInputStream fis = new FileInputStream(path);
InputStreamReader isr = new InputStreamReader(fis,"UTF-8"); //UTF-8 可以小寫
BufferedReader br=new BufferedReader(isr);

寫入文件

使用 UTF-8 的編碼來寫入檔案
FileOutputStream stream;// provides file access
OutputStreamWriter writer;// writes to the file 
 
stream = new FileOutputStream(filename);
writer = new OutputStreamWriter(stream,"UTF-8");   



Ref.
cpdetector
http://cpdetector.sourceforge.net/index.shtml
Java判斷文件編碼格式
http://fecbob.pixnet.net/blog/post/39393899-java%E5%88%A4%E6%96%B7%E6%96%87%E4%BB%B6%E7%B7%A8%E7%A2%BC%E6%A0%BC%E5%BC%8F-
判定文件编码或文本流编码的方法http://www.iteye.com/topic/108540
java读文件和写文件编码方式的控制
http://my.oschina.net/haquanwen/blog/158952
Jota Text Editor
https://play.google.com/store/apps/details?id=jp.sblo.pandora.jota
Java プログラミング(基礎と応用) 
http://antlers.cis.ibaraki.ac.jp/
ファイル処理(2)文字ストリーム(入力:ファイル、出力:画面)
http://antlers.cis.ibaraki.ac.jp/PROGRAM/JAVA/FILE/j621b.htm
ファイル処理(2)文字ストリーム(入力:ファイル、出力:画面)
http://antlers.cis.ibaraki.ac.jp/PROGRAM/JAVA/FILE/j621a.htm
[ Java常見問題 ] 判斷文件編碼是否為UTF-8
http://puremonkey2010.blogspot.tw/2010/10/java-utf-8.html?m=0
http://antlers.cis.ibaraki.ac.jp/PROGRAM/JAVA/FILE/j621a.htm
Java指定编码读写文件(UTF-8)
http://gaofeihang.blog.163.com/blog/static/8450828520098241202798/
[Charset]UTF-8, UTF-16, UTF-16LE, UTF-16BE的区别
http://mocha-c-163-com.iteye.com/blog/583064
【转】File,FileInputStream,FileReader,InputStreamReader,BufferedReader 的使用和区别
http://hi.baidu.com/yumin87/item/78dbb21a20d62709e75c36a3
[分享] 編碼轉換的程式碼 
http://www.javaworld.com.tw/jute/post/view?bid=35&id=184801&sty=3
JAVA判断输入流字符编码的困惑
http://blog.csdn.net/gaolu/article/details/6170518
java字符编码转换研究(转) 第二部分收藏                 
http://zdsfwy.blog.51cto.com/2400848/1174272

2013年5月3日金曜日

show() 與 setVisible() 的不同

有時候去爬別人的程式碼會看到在最後使用 xxxx.show(),
而不是我們常用的 setVisible(true).

2013年3月27日水曜日

java作用域public ,private ,protected 及不寫時的區別

作用域 當前類 同一package 子孫類 其他package
public
protected ×
friendly × ×
private × × ×
1、public:public表該數據成員、成員函數對所有用戶開放,所有用戶都可以直接呼叫
2、private:private表私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。
3、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。
不寫時默認為friendly
寫在同一個檔案內視為同package
同一個檔案內只能有一個 public class

2013年3月11日月曜日

String Source Code in Java

Summary

    /**
     * Converts this string to a new character array.
     *
     * @return  a newly allocated character array whose length is the length
     *          of this string and whose contents are initialized to contain
     *          the character sequence represented by this string.
     */
    public char[] toCharArray() {
        // Cannot use Arrays.copyOf because of class initialization order issues
        char result[] = new char[value.length];
        System.arraycopy(value, 0, result, 0, value.length);
        return result;
    }

2012年2月24日金曜日

安裝GWT

想要在Eclipse上面使用GWT的話, 以下是安裝流程:

01.
安裝Eclipse, 到官網下載(此次下載的是Eclipse Class)
到現在為止(2012-02-24)的版本是3.7, 解壓縮後找個地方放即可使用.
02.
安裝ADT  Plugin for Eclipse套件
pic
03.
安裝Eclipse的GWT Plugin, 安裝方法為Help -> Install New Software, 加入下面這個 Repository:
http://dl.google.com/eclipse/plugin/3.7
如果手上的Eclipse不是3.7的話, 請隨著自己的版本更改url的版號
pic

PS.
如果沒安裝ADT Plugin for Eclipse就直接安裝GWT Plugin的話, 會出現以下的err message,
------------------------------------------------------------------------------
Cannot complete the install because one or more required items could not be found.
  Software being installed: Google App Engine Tools for Android 2.5.1.v201201120043-rel-r37 (com.google.gdt.eclipse.mobile.android.feature.feature.group 2.5.1.v201201120043-rel-r37)
  Missing requirement: com.google.gdt.eclipse.mobile.android 2.5.1.v201201120043-rel-r37 requires 'bundle com.android.ide.eclipse.adt 12.0.0' but it could not be found
  Cannot satisfy dependency:
    From: Google App Engine Tools for Android 2.5.1.v201201120043-rel-r37 (com.google.gdt.eclipse.mobile.android.feature.feature.group 2.5.1.v201201120043-rel-r37)
    To: com.google.gdt.eclipse.mobile.android [2.5.1.v201201120043-rel-r37]
-------------------------------------------------------------------------------

2012年2月17日金曜日

Eclipse - 查詢原始碼遇到Source not found...

很多朋友遇到過這樣的問題:
  開發過程中會經常查看所引用的類別(介面或方法)的源碼,但是往往在查看JDK中的類別(介面或方法)時出現提示頁面 「Source not found」,這是因為Eclipse默認設定的自帶的JDK是沒有源src的,那麼如何引入JDK和框架的源碼呢?

這裡介紹兩個設置方法:
  (查看Spring、Hibernate、Struts等框架的原始碼需要下載他們的原始碼文件,設定方法相同)

方法一:
  點擊類別(介面或方法),右鍵Open Declaration或者按F3鍵出現提示頁面「Source not found」,點擊頁面中的「Attach Source...」按鈕,點擊彈出窗口中的「External File...」按鈕找到JDK的原始碼點擊OK按鈕,設定完成
  一般JDK的源碼在安裝目錄下有個文件叫:src.zip就是,如果是spring的方法,用同樣方法,添加spring的源文件的壓縮包(應該另外下載)。

方法二:
  進入Preferences設置窗口aJavaa選擇Installed JREsa更改默認選擇的JDK為自定的有源碼的(沒有設定的點擊「Add...」添加,或者點擊「Search...」按鈕查找)aOK!
  另,在Preferences設置的JAVA / Build Path / Classpath Variables下有一個JAR_SRC變量,該變量負責設置源代碼路徑,但是該變量是不可修改的,必須由系統自動檢測。

補充:查看所引用的類別(介面或方法)的原始碼方法:
方法一:將該類別(介面或方法)名稱反白後滑鼠右鍵彈出選單,選擇Open Declaration或者直接按F3鍵,即可進入原始碼。
方法二:按住Ctrl鍵,滑鼠點擊該類別(介面或方法),即可進入原始碼。
   成功後, 原始碼會開啟在新的table.

2012年2月6日月曜日

印出V型

印出V型
012345678
*1111111*
1*11111*
11*111*
111*1*
1111*

這個V型, 它的長(從上到下)用掉5行, 寬(從左到右)用掉9個字元
想要印出來, 不是從第一行印出個斜線到第5行, 然後再印回去. 
這是不可能的 (汗. 
ps.1是方便計算用
假設在for-loop裡面, 兩個頂端的點, 第一個是1 那麼另一個為9,
這說明了什麼, 程式在第一行第一個字元的位置印出星號, * ,
然後下一個* 在第九個字元的位置印出, 中間相差8 個字元,
第二行在第二個字元的位置印出* 第8 個字元印出另一個* ,相差6,
以下列出關係

第一個*
|   中間空格
|   |   第二個*
1 + 8   9
2 + 6   8
3 + 4   7
4 + 2   6
5 + 0   5 

跟印出直角三角形之前一樣, 如果把圖形座標化的話, 右上角為(0,0), 
兩個頂點的座標為
(0,0), (0,8)
(1,1), (1,7)
(2,2), (2,6)
....
(4,4)

這樣大概可以看出規律了, 首先每行的第一個星號(*), 會在x=y的地方
印出來, 下一個星號(*)會在x+y=8的地方印出, 其他地方則用空白填滿. 

---------------------------------------------------------------
public class Example {
	public static void main(String[] argv) {
		for (int y = 0; y < 5; y++) {
			for (int x = 0; x < 9; x++)
				if (x == y || ((x + y == 8))) {
					System.out.print("*");
				} else {
					System.out.print(" ");
				}
			System.out.println();
		}
	}
}
----------------------------------------------------------------
第一個for-loop負責印出斷行, 第二個在x=y以及x=y=8的時候會印出星號(*),
否則則印出空格.

印出圖形

印出星號 print star (*)
最簡單的直角三角形 (Right Triangle)
http://mathworld.wolfram.com/RightTriangle.html
=================================================
Result
*
**
***
-------------------------------------------------------------
1.
public class Example {
    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
=================================================
continue...

2012年1月2日月曜日

99乘法表@Java

public class Test99
{
    public static void main(String[] args)
    {
        //print the line
        for (int i = 0 ; i < 62 ; i++)
        {
            System.out.printf("-");
        }
        System.out.println("\n");
        //out loop
        for (int i=1 ; i < 10 ; i++)
        {
            //inner loop
            for (int j = 1 ; j < 10 ; j++)
            {
                System.out.printf ("%1dx%1d=%2d ",i,j,i*j);
            }
            System.out.println ("\n");
        }
       
        //print the line
        for (int i = 0 ; i < 62 ; i++)
        {
            System.out.printf("-");
        }
    }
}

2011年10月4日火曜日

JAVA JDK的環境設定

JAVA JDK的環境設定

マイ コンピュータ
我的電腦
or
(コントロール パネル)
(控制台)
プロパティ
內容
or
(システム)
(系統)
詳細設定
進階
環境変数(N)
環境變數(N)
システム環境変数(S)
系統變數(S)



 Pathをダブルクリック 変数に";c:\jdk\bin"を追加してくたさい システム環境変数の新規(W)




寫入三項系統變數(システム環境変数)

01.JAVA_HOME
新規(W)
新增(W)
def.
JDKのインストールの場所
JDK安裝位置
ex:
C:\Program Files\Java\jdk1.6.0_21

------------------
02.CLASSPATH
新規(W)
新增(W)
def.
  讓編譯或實行時期JAVA能依照指定的路徑找到所需要的類別或者jar檔案,簡單說就是類別(Class)的路徑(Path)
ex:
填入 "."
or
"C:\Program Files\Java\jdk1.6.0_27\lib"
------------------
03.PATH
新規(W)
新增(W)
or
編集(I)
編輯(I)
def.
用來指向java編譯器以及java執行檔案的位置,通常是位於
「 JAVA_HOME 路徑 + \bin 」目錄下
ex:
";%JAVA_HOME%\bin"(請注意最前面的分號)
or
;C:\Program Files\Java\jdk1.6.0_27\bin
------------------
PS.
Path,在已有的路徑最後面增加jdk的安裝路徑\bin
(請注意所加上的路徑前面必須有分號";"),
ex: ooxxx;c:\jdk\bin
ooxxx是之前就有的東西,
jdk是安裝javajdk的目錄路徑→;系統變數(新增(N))->
變數名稱填入classpath->變數值填入";安裝路徑\lib"


測試 開啟命令視窗模式(cmd), key入 "java -version", 有反應的話就成功了
但是javac沒效果的話, 請重登或者重開機試試看.