《Java是如何快速煮成C#的?》(一):相似的方法
Posted on 2010-09-01 08:32 邀月 閱讀(456) 評(píng)論(0) 編輯 收藏 所屬分類: JavaFromCsharp打算每天花點(diǎn)時(shí)間把學(xué)習(xí)Java的過(guò)程記錄下來(lái),這個(gè)斷斷續(xù)續(xù)的Java學(xué)習(xí)筆記是自己學(xué)習(xí)java過(guò)程中的零星總結(jié),以作備份。同時(shí)希望與CSharp轉(zhuǎn)Java領(lǐng)域的朋友們共同學(xué)習(xí)。
相比而言,C#是后生,它吸收了Java的大部分精華,但兩者還是有一些細(xì)微差別,今天,我們看第一個(gè)區(qū)別:
■許多系統(tǒng)對(duì)象方法都有相同的方法名,只是在大小寫形式上有區(qū)別。
我們通過(guò)一個(gè)最簡(jiǎn)單的例子:
文本"1ASDF NI1221312 HK1 2222/1
1QWW NI1232133 HK1 3333/1"
兩
行文本,比如第1行表示旅客1的信息,第2行表示旅客2的信息,后面可能還有很多旅客信息,如何用正則表達(dá)式提取每個(gè)旅客的信息?最后結(jié)果類似于
String1:1ASDF NI1221312 HK1 2222/1,String2:1QWW NI1232133 HK1 3333/1
用熟悉的C#,我們這么寫:
using System.Text;
using System.Text.RegularExpressions;
namespace LearnJavaFromCharp01
{
class Program
{
static void Main(string[] args)
{
String str = "1ASDF NI1221312 HK1 2222/1" + "1QWW1 NI1232133 HK1 3333"
+ "1QWW2 NI1232133 HK1 33331" + "1QWW3 NI1232133 HK1 33331/1"
+ "1QWW4 NI1232133 HK1 33331" + "1QWW5 NI1232133 HK1 3333/1";
String regex = "(1)(?:.|"n)*?/""1";
GetRegexString(str, regex);
Console.ReadKey();
}
static void GetRegexString(string oldStr, String strPattern)
{
Regex p = new Regex(strPattern, RegexOptions.Compiled);
MatchCollection mc = p.Matches(oldStr);
for (int i = 0; i < mc.Count; i++)
{
Console.WriteLine(mc[i].Value);
}
}
}
}
模仿著,Java可以這么寫:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class LearnJavaFromCsharp { public static void main(String[] args) {
String str = "1ASDF NI1221312 HK1 2222/1" + "1QWW1 NI1232133 HK1 3333"
+ "1QWW2 NI1232133 HK1 33331" + "1QWW3 NI1232133 HK1 33331/1"
+ "1QWW4 NI1232133 HK1 33331" + "1QWW5 NI1232133 HK1 3333/1";
String regex = "(1)(?:.|"n)*?/""1";
GetRegexString(str, regex);
}
static void GetRegexString(String oldStr, String strPattern) {
Pattern p= Pattern.compile(strPattern);
Matcher m = p.matcher(oldStr);while (m.find())
System.out.println(m.group());
}
}
從這兩段代碼看,都需要添加命名空間,語(yǔ)法也非常類似。
Package(Java)<-->NameSpace(C#)
String(Java)<-->string(C#)
Pattern(Java)<-->Regex(C#)
Matcher(Java)<-->MatchCollection(C#)
java.util.regex(Java)<-->System.Text.RegularExpressions(C#)
System.out.println(Java)<-->Console.WriteLine(C#)
注意:c#的String與string是唯一的一個(gè)可以大小寫混用的類,但其實(shí)string關(guān)鍵字是String類的一個(gè)別名,定義時(shí),關(guān)鍵字一般使用string比較符合規(guī)范。(作者更正)。
在這個(gè)例子中的幾點(diǎn)感受:
1、開發(fā)環(huán)境Vs2010和Eclipse 3.6。共同點(diǎn),巨耗內(nèi)存,尤其是后者。易用性,前者明顯占優(yōu)。擴(kuò)展性,后者遙遙領(lǐng)先。
編輯功能方面,Eclipse中Ctrl+1是所有程序員的最愛,它會(huì)自動(dòng)提供幾個(gè)備選的參考命名空間,智能吧?
而vs2010也有類似的功能,并且還有一些值得稱贊之處,如Alt+豎選一塊代碼區(qū),多好的一個(gè)功能啊。
2、幫助文檔的實(shí)用性。MSDN絕對(duì)勝出一籌。不僅僅在中文化及時(shí),而且示例導(dǎo)向性較強(qiáng)。各位自己比較一下:
http://download-llnw.oracle.com/javase/6/docs/api/
http://msdn.microsoft.com/zh-cn/library/system.text.regularexpressions.regex.aspx
3、開發(fā)環(huán)境的部署和生成程序的部署方面,C#易用性超出一大截,而Java要麻煩一點(diǎn),畢竟是多操作系統(tǒng)的嘛。當(dāng)然,NetBeans IDE將易用性和功能的擴(kuò)展性結(jié)合得比Eclipse要好一些,有點(diǎn)像vs環(huán)境了。
怎么樣,對(duì)著學(xué),是不是很輕松啊!一步一步來(lái)吧。
助人等于自助! 3w@live.cn