C#和java区别小整理
引言:
刚开始学习C#,发现它和java很多语法都类似,但也有一些区别,下面整理的内容(区别java语法的)都是让我头疼了的地方,希望有和我一样从java转到C#的读者能减少走弯路,也希望有C#高手能多多指点小弟。
正文:
嘿嘿,不罗嗦了,下面就是我遇到过的问题。
1.写控制台程序时,有时窗口一闪而过,可以在Main()函数最后一行加上Console.ReadKey();读取键盘输入防止窗口立刻消失(和C++system("pause");类似)。
2.关于二维数组的定义不同,比如定义一个5X4的二维数组,C#中是:(方法一)int[][] a=new int[5][];for(int i=0;i<4;i++){a[i]=new int[4];}
(方法二) int[,] a=new int[5,4];
3.C#中的换行符是'\r\n'或者Environment.NewLine();(我都是用的前者,如果需要换平台使用程序则使用后者)。
4.在winform程序中你如果想要点击一个按钮出现一个可以选择文件的对话框,那太好了,在点击按钮事件中添加OpenFileDialog ofd = new OpenFileDialog();ofd.ShowDialog();
就可以了,获取该文件路径用ofd.FileName。
5.事件入口标志就是右边属性栏下边属性页右边的闪电标志,点击它就好了。(请不要发笑,我当时就找了好久)。
6.
(1)如果用“.”作为分隔的话,必须是如下写法:String.split("\\."),这样才能正确的分隔开,不能用String.split(".");
(2)如果用“|”作为分隔的话,必须是如下写法:String.split("\\|"),这样才能正确的分隔开,不能用String.split("|");
“.”和“|”都是转义字符,必须得加"\\";
(3)如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“a=1 and b =2 or c=3”,把三个都分隔出来,可以用String.split("and|or");
7.C#中把string当做char[]处理,如java中的charAt在C#中直接用Str[i]就可以了。(这个够方便,嘿嘿)
8.C#中正则表达式要用到Regex,举例:Regex re=new Regex(“[0-9]”);re.isMatch(String str);
9.遍历文件夹时C#中一般使用的都是传递地址,然后在判断它是文件还是文件夹,因为C#中文件的声明(FileInfo)和文件夹的声明(DirectoryInfo)不一样,
而在java中则都是File。(下面的程序是我写的遍历某目录下this和word的次数,里面有遍历文件夹代码)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace wordTimes
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
clear();
String[] fid = { "this", "word" };
findFile(textBox1.Text,fid);
//textBox2.Text=calculate(textBox1.Text, fid)[0].ToString();
}
//先找出目录下的所有txt文件
public void findFile(String path,String[] fid){
if(Directory.Exists(path)){
//遍历该目录下的所有文件
foreach(String filepath in Directory.GetFileSystemEntries(path)){
findFile(filepath,fid);
}
}else{
if(File.Exists(path)){
FileInfo f = new FileInfo(path);
//如果文件以txt结尾,则扫描内容
if(f.Name.EndsWith(".txt")){
int[] times = findPara(path,fid);
String str=path;
if (times != null)
{
str = str+ "\r\n" + fid[0] + ":" + times[0] + "\r\n" + fid[1] + ":" + times[1] + "\r\n";
}
else
str = str + "\r\n" + fid[0] + ":" + 0 + "\r\n" + fid[1] + ":" + 0 + "\r\n";
textBox2.Text = textBox2.Text + str;
label2.Text = "提示:统计成功!!";
}
}
return;
}
}
//把txt文件的每一行都提取出来处理
public int[] findPara(String path,String[] fid){
FileInfo f = new FileInfo(path);
if(f.Length==0){
return null;
}
int[] mid=new int[fid.Length];
try {
FileStream fis=null;
StreamReader br=null;
try{
fis=new FileStream(path,FileMode.Open);
br=new StreamReader(fis);
String s = br.ReadLine();
//以行为单位进行处理
while(s!=null&&!s.Equals("")){
for (int i = 0; i < fid.Length; i++) {
mid[i]+=findTimes(s,fid[i]);
}
s=br.ReadLine();
}
}finally{
if(br!=null) br.Close();
if(fis!=null) fis.Close();
}
} catch (Exception ex) {
label2.Text = "提示:读文件出错!";
}
return mid;
}
//查看一行字符中word和this出现的次数
public int findTimes(String str1,String str2){
int num=0;
int pos=str1.IndexOf(str2, 0);
while(pos!=-1){
num++;
pos=str1.IndexOf(str2, pos+str2.Length);
}
return num;
}
//清理屏幕
public void clear()
{
label2.Text = "提示:";
textBox2.Text = "";
}
}
}
10.将图像灰度化就是获取每一个点的像素,然后R*0.299+G*0.587+B*0.114得到它的灰度像素,再把此灰度像素代会原图像即可。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
private void button2_Click(object sender, EventArgs e)
{
//bm的声明System.Drawing.Bitmap bm;
if (bm != null)
{
Color c;
int ret;
for (int i = 0; i < bm.Width;i++)
{
for (int j = 0; j < bm.Height; j++)
{
c = bm.GetPixel(i,j);
ret = (int)(c.R * 0.299 + c.G * 0.587 + c.B * 0.114);
bm.SetPixel(i, j, Color.FromArgb(ret, ret, ret));
}
}
pictureBox2.Image = bm;
}
}
11.C#中的Substring(起始位置,子字符串长度)而java中是subString(起始位置,终止位置)(哈哈,这个可是相当纠结区别,坚持看到最后的童鞋,这个就当做奖励了)。
尾声:
我知道其实你也看出来了我是菜鸟,还有好多区别我都不知道,希望各位大大能多多指教,呵呵,不胜感激!