先写一个对文件操作的功能类

暂时只用得到读

package PYTHONtoJAVA;import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;public class IO {//指定编码格式的路径读取public static char[] getTheFile(String path,String format) {char[] article = null;try {File file = new File(path);FileInputStream fis = new FileInputStream(file);InputStreamReader isr = new InputStreamReader(fis,format);char[] articleF = new char[(int) file.length()];int len;while((len=isr.read(articleF))!=-1) {article = new char[len];for(int i=0;i<len;i++) {article[i] = articleF[i];}}isr.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} return article;}//不带编码格式的,默认为“utf-8”的路径读取public static char[] getTheFile(String path) {char[] article = null;try {File file = new File(path);FileInputStream fis = new FileInputStream(file);InputStreamReader isr = new InputStreamReader(fis,"utf-8");char[] articleF = new char[(int) file.length()];int len;while((len=isr.read(articleF))!=-1) {article = new char[len];for(int i=0;i<len;i++) {article[i] = articleF[i];}}isr.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} return article;}public static void createFile(String path) {}public static void createFile() {}
}

再写操作程序的功能类

写起来发现很难,有些想法只在脑子里简单,很多功能很难实现,还有很多小细节,因为没有仔细研究过python的底层,所以全靠自己的经验。

目前想法是,把读到的python程序放入一个HashMap中并且编号,进行一行行或者多行分析。再建立一个HashMap用于存放转译过后的代码。创建一个ArrayList用于存放出现的变量名、方法名、类名等等。具体操作分开写,比如赋值语句、print语句、、、单独对他们进行分析转义,目前已经写了赋值语句,后面会继续写,不知道能不能行。操作整体对象时将分为“块”,比如class整体是一个块,def整体是一个块,for语句是一个块、、、先写着。

package PYTHONtoJAVA;import java.util.Map;
import java.util.ArrayList;
import java.util.HashMap;public class Operation {//记录存在的变量名、方法名和类名static ArrayList<String> variable;//记录python程序和新创建的javaMap<Integer,String> mapString = new HashMap<>();Map<Integer,String> mapNew = new HashMap<>();char[] article;//初始化map,将目标文件变成一行一行处理public Operation(char[] article) {this.article = article;int row=1;for(int i=0;i<article.length;i++) {if(article[i] == '\n') {row++;}}int j=0;for(int i=0;i<row;i++) {String tmp = "";for(;j<article.length;j++) {if(article[j] != '\n' && j != article.length-1) {tmp += article[j];}else if(article[j] == '\n'){mapString.put(i, tmp);j++;break;}else if(j == article.length-1) {tmp += article[j];mapString.put(i, tmp);}}}}//字符串内是否含有指定字符串public boolean contains(String str,String keywords) {int length = keywords.length();for(int i=0;i<=str.length()-length;i++) {if(str.substring(i,i+length).equals(keywords)) {return true;}}return false;}//得到赋值语句“=”前的变量名public String getName(int index) {String str = mapString.get(index);String news;int to = 0;for(int i=0;i<str.length();i++) {if(str.substring(i,i+1).equals("=")) {to = i;break;}}news = str.substring(0,to).strip();return news;}//获取字符串开头空格数量public int getBlank(int index) {String str = mapString.get(index);int blank = 0;for(int i=0;i<str.length();i++) {if(str.substring(i,i+1).equals(" ")) {blank++;}else {break;}}return blank;}//从指定行向下搜索,找到class或者def或者for之类的语句负责的代码块public int searchRange(int index) {if(index == mapString.size()-1) {return index;}int blank = getBlank(index);int orange = index + 1;while(true) {if(orange == mapString.size()-1) {return orange;}if(!mapString.get(orange).isBlank() && getBlank(orange) <= blank) {return orange-1;}else {orange++;}}}//处理赋值语句public void assignment(int writeIndex,int index) {String str = mapString.get(index);if(variable.contains(getName(index))) {mapNew.put(writeIndex, str);}else {variable.add(getName(index));mapNew.put(writeIndex, "Object"+str);}}//处理print语句public void output(int writeIndex,int index) {char[] arr = mapString.get(index).toCharArray();int from;for(int i=0;i<arr.length;i++) {}}//处理索引范围内的mapString的程序段public void gan(int writeIndex,int from,int to) {//判断语句是不是赋值语句“=”,如果是,判断变量名是否已经存在,不存在添加Object,并且放到变量名堆里。//如果是for语句,需要重写。如果是elif需要改变。如果是print需要改变。如果是def,class需要改变。如果是魔法方法,需要改变。//如果是self,需要改变。如果是random之类的需要改变。//如果处理块是一行if(from == to) {String str = mapString.get(from);if(contains(str, "=") && !contains(str, "print")) {assignment(writeIndex, from);}else if(contains(str, "print")){}}}//一起处理public void operate() {//将class和def分成块,从index开始读,总共orange行。int index = 0;int orange = 0;//flag判断已经将import语句全部导入,进入主体转换boolean flag = true;//写入mapNew的索引int writeIndex = 0;while(flag) {if(mapString.get(index).equals("")) {index++;}else if(this.contains(mapString.get(index),"import")) {mapNew.put(writeIndex++, mapString.get(index++));}else {flag = false;}}//至此,包含import的行都已经自动略过,保留原格式while(true) {orange = searchRange(index);}}
}

Python转Java程序(1)相关推荐

  1. java min 函数的使用方法_【Python】Java程序员学习Python(五)— 函数的定义和使用...

    不想做一个待宰的羔羊!!!!要自己变得强大.... 函数的定义和使用放在最前边还是有原因的,现在语言趋于通用,基本类型基本都是那些,重点还是学习对象的使用方法,而最根本的还是方法的使用,因此优先介绍, ...

  2. 有python基础学习java简单吗_【Python】Java程序员学习Python(三)— 基础入门

    一闪一闪亮晶晶,满天都是小星星,挂在天上放光明,好像许多小眼睛.不要问我为什么喜欢这首歌,我不会告诉你是因为有人用口琴吹给我听. 一.Python学习文档与资料 一般来说文档的资料总是最权威,最全面的 ...

  3. 来自Java程序员的Python新手入门小结

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 欣宸是个Java程序员,最近正在学习Pyth ...

  4. python调用java方法_python调用java

    一.环境确认: 首先,要确认安装的jdk版本是1.8以上:其次,jdk安装位数与python安装的位数一致,及要么一起64位版本要么一起32版本. (以上2点不满足均会报错,比如:not found ...

  5. python调用java之Jpype实现java接口

    python实现java接口 概述 java程序 java接口 java测试函数 在python中实现java接口的两种方式 第一种:JImplements JImplements的使用示例 JImp ...

  6. Java调用python打包的程序.exe,包括获取exec()中打印的日志,亲测有效

    python写了一个方法,windows平台上怎么被Java服务调用呢? 最简单的办法,python利用pyinstaller打包成.exe程序,Java程序通过Process调用,想同时获取.exe ...

  7. java vo转map_Jython:在 Java 程序里运行 Python 代码 4.5

    彭翌 彭翌,网易游戏资深运维开发工程师,从事大数据相关的基础架构平台研发工作,业余时间也关注分布式系统等相关领域. 前言 众所周知,JVM 在大数据基础架构领域可以说是独占鳌头,当我们需要开发大数据处 ...

  8. java跟python对比_【多年的Java程序员总结Java与Python的对比 】

    多年的Java程序员总结Java与Python的对比 作为一个有多年职场经验的技术员,每当我遇到同行时,我都会问一句"你现在用的是什么语言?你喜欢用哪种语言?"至于答案,容后再说. ...

  9. java: 程序包com.github.pagehelper不存在_Rust语言正在兴起,Java、Python、C的末日来临?...

    您可能从未用Mozilla创建的开源,系统级编程语言Rust编写任何东西,但是您可能会在某个时候写.在Stack Overflow的2019年开发人员调查中,开发人员将Rust评为"最受欢迎 ...

  10. java程序员_Java和Python的区别 好程序员帮大家解读

    Java和Python的区别 好程序员今天先来解读Java编程语言的优势,人工智能和大数据火爆一时,随之而来,引起了编程语言的人气暴涨.而Java和Python作为最炙手可热的编程语言从一开始便赢得了 ...

最新文章

  1. 字符串算法--KMP--Java实现
  2. Java基础知识回顾-6
  3. 前端学习(2472):发布文章功能介绍
  4. 了解这些后设计输入框原来这么简单
  5. C语言重难点总结:printf和scanf
  6. golang https 代理_代理,生活中随处可见,Go中如何进行 HTTPS 代理呢?
  7. 视频编解码(十四):机顶盒调试编解码器显示总结
  8. java向注册表单传递数据php_form表单传递数组数据、php脚本接收的实例
  9. python文件对象提供了3个读方法、分别是-案例驱动式Python基础与应用-超星尔雅-学习通-题库零氪...
  10. ERP标准物料编码规则及方法
  11. 计算机四级要学多长时间,过计算机四级要多长时间哦?
  12. 海量前端后台Java源码模板下载
  13. 汇编intel 8086/8088/80386 学习
  14. 线性方程组解的分析:唯一解,无穷多解以及无解
  15. 2012年8月编程语言排行榜
  16. WindowsLive™ OneCare™初体验
  17. 浙工大计算机学院2013学年二等奖学金,关于2012—2013学年学院奖学金评定文件.doc...
  18. Android 网星工具箱Beta版
  19. Fiddler 抓包工具使用详解
  20. 【教程】应用侧连接华为云IoT平台

热门文章

  1. 国军标GJB150A霉菌试验详解
  2. Java、前端页面中文乱码解决方式
  3. TortoiseGit--小乌龟git项目中的使用简介
  4. JAVA入门_工具类_书籍借阅日期计算
  5. 【MFC开发(15)】进度条控件Progress Control
  6. Ruby中对应PHP的hex2bin和bin2hex方法
  7. matlab2015a安装秘钥_MATLAB2015a(2015b)安装教程
  8. 软件架构及几种典型框架
  9. CCS10.2.0安装教程
  10. vscode - 设置 Python 版本