python java c++文本处理对比

一:起因

(1)态度和思想的转变很重要:要说起学习Python的原因,也够曲折的 —— 很早之前就听说了Python 以及 Perl语言,一直有学习的打算和冲动;最后学习Python是由于学习《机器学习》,和国外的教学视频里面那些洋教授们,以及国外关于机器学习的API都是用到的Python语言,自己初试牛刀一把,感觉效率就是高,慢慢的观念就转变了。

(2)态度和思想的转变很重要:学习一门新技术或者语言,跟人们认识事物的规律是一样一样 —— 刚刚接触新鲜事物时,第一反应排斥、反对(哪里都感觉别扭);克服忍耐几天之后(也可能几周之后也再没有接触  ps:放一边,个把月后才学习),再之后会会有一段蜜月期(感觉效率啥的非常高,非常好 ps:认识不够),开始怀疑以前学习的语言有多么的丑陋与愚笨,开始抵触原来的学习所得,甚至开始怀疑人生(ps:也许会有的);蜜月期一过,自己把新知识的基本知识学的差不多了,开始接触高级应用,但是由于对高级复杂的应用API不是很了解,总是出这样或那样莫名其妙的错误,又开始怀疑人生了……

(3)避免上述怪状的方法,就是广交益友,特别是技术大牛 —— 当你学习一门新技术时,有大牛给你指点,肯定会给你带来不少乐趣,还收获了友谊;关注技术大牛的技术blog(CSDN 或 Github)

(4)我就是这样开始了,我的短暂的学习Python之旅。

二:文本处理比较

(1)Java语言:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /* 
  2.    * @function:读取文件内容 
  3.    * @input:输入文件名 
  4.    * @output:文件的全部内容 
  5.    */  
  6.   public static String readFile(String file) throws FileNotFoundException, IOException {  
  7.       //StringBuffer sb = new StringBuffer();  
  8. FileInputStream fileInputStream = new FileInputStream(file)  
  9.       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream, "gbk"));  
  10.       String line = bufferedReader.readLine();  
  11.       while (line != null) {  
  12.     String [] words = line.split(regex);// 或者replace等等  
  13.     for(word in words){  
  14.         System.out.println(word);  
  15.     }  
  16.           //sb.append(line).append("\r\n");// windows 系统中的换行符  
  17.           line = bufferedReader.readLine();  
  18.       }  
  19.       bufferedReader.close();  
  20.       return sb.toString();// 牛逼 把一篇文章存在这里面的,这是不行的  
  21.   }  

(2)C++语言:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. C++语言实现  
  2. C++中没有实现split功能的函数,下面用C++ STL中的一些函数模拟实现split功能。  
  3. #include <iostream>  
  4. #include <string>  
  5. #include <vector>  
  6. #include <fstream>  
  7. using namespace std;  
  8.   
  9. /* 
  10. @in, src: 待分割的字符串 
  11. @in, delim: 分隔符字符串 
  12. @in_out, dest: 保存分割后的每个字符串 
  13. */  
  14. void split(const string& src, const string& delim, vector<string>& dest)  
  15. {  
  16.     string str = src;  
  17.     string::size_type start = 0, index;  
  18.     string substr;  
  19.   
  20.     index = str.find_first_of(delim, start);    //在str中查找(起始:start) delim的任意字符的第一次出现的位置  
  21.     while(index != string::npos)  
  22.     {  
  23.         substr = str.substr(start, index-start);  
  24.         dest.push_back(substr);  
  25.         start = str.find_first_not_of(delim, index);    //在str中查找(起始:index) 第一个不属于delim的字符出现的位置  
  26.         if(start == string::npos) return;  
  27.   
  28.         index = str.find_first_of(delim, start);  
  29.     }  
  30. }  
  31.   
  32.   
  33. int main()  
  34. {  
  35.     ifstream infile("test.txt", ios::in);  
  36.     vector<string> results;  
  37.     string word;  
  38.     string delim(" ");  
  39.     string textline;  
  40.     if(infile.good())  
  41.     {  
  42.         while(!infile.fail())  
  43.         {  
  44.             getline(infile, textline);  
  45.             split(textline, delim, results);  
  46.         }  
  47.     }  
  48.     infile.close();  
  49.   
  50.     vector<string>::iterator iter = results.begin();  
  51.     while(iter != results.end())  
  52.     {  
  53.         cout<<*iter++<<endl;  
  54.     }  
  55.   
  56.     return 0;  
  57. }  

(3)Python语言:

[python]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. 在Python中有专门的函数split()对字符串进行分割,实现较为简单  
  2. myfile = open('test.txt''r')  
  3. allWords = []  
  4. line = myfile.readline()  
  5. while line:  
  6.     list = line.split(' ')  
  7.     for word in list:  
  8.         if word[-1]=='\n':  
  9.             allWords.append(word[:-1])  #去掉行末的'\n'  
  10.         else:  
  11.             allWords.append(word)  
  12.     line = myfile.readline()  
  13. myfile.close()    
  14. print allWords  

(4)总结:相比较而言,(抛开运行效率不说),开发效率比较好的是Python,其次是Java,最后是c++,(但是一旦c++这些方法提前包装好了,也是很不错的)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值