翻译软件怎么实现的?我用Java教你实现私人自用翻译软件

在这里插入图片描述
很多人问博主:市面上很多翻译软件,他们是怎么实现的呢?
比如腾讯QQ最新版本的QQ可实现截图翻译:
在这里插入图片描述
博主实现的软件预览:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
本原创软件下载地址:点击下载源码

    博主今天就来给大家讲解一下基础版本的翻译软件是如何实现的,首先申明一下,本文采用的翻译接口是由有道云,腾讯,谷歌提供的翻译接口API,基于Java语言实现图形界面化,采用Java-SWT框架快速生成自定义图形界面。使用阿里的json-jar即fast-json进行json字符串解析,使用自定义解析算法实现字符串提取,这里的算法实际上就是基础代码的重复调用减少中间环节。除此之外,博主根据网络教程,实现了读取图片,识别图片中文字从而一键翻译。文本识别jar来自腾讯AI开放平台。至此,基础的实现技术原理介绍到此结束。我们用一张mind脑图来罗列清晰我们的基本思路。在这里插入图片描述
在这里插入图片描述
软件的结构图:(本软件开发采用eclispe-4.5版本,idea不支持SWT拓展)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用到的lib包:
在这里插入图片描述
在这里插入图片描述

    好了,框架图介绍到这里,我们接下来,直接上代码:(所有源代码开源,欢迎各位下载后自行尝试,有任何问题请及时在文章下方留言评论,博主会一一解答)

  1. 主窗口代码
package com.sinsy;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import java.io.IOException;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.internal.win32.OS;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.wb.swt.SWTResourceManager;
import com.sinsy.fanyi.baidu.Fanyi_baidu;
import com.sinsy.fanyi.google.fanyi_google;
import com.sinsy.fanyi.tencent.fanyi_tencent;
import com.sinsy.fanyi.youdaoyun.fanyi_youdaoyun;
import com.sinsy.fntp.ClipboradUtils;
import com.sinsy.fntp.shibie.aiscan;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
public class MainWindows {
	protected Color themecolor;
	protected Shell shell;
	private Text shurukuang;
	private Text shuchu;
	protected int style;
	protected String imagepathString;
	protected boolean flag=false;
	protected boolean flag2=false;
	private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
	public ClipboradUtils yUtils = new ClipboradUtils();
	private String result=null;
	private boolean baidu=true;
	private boolean tengxun=false;
	private boolean youdaoyun=false;
	private boolean google=false;
	private JPanel yu= new JPanel();
	/**
	 * Launch the application.
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			MainWindows window = new MainWindows();
//			MessageDialog.openInformation(null, "", "hello");
			window.open();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Open the window.
	 */
	public void open() {
		Display display = Display.getDefault();
		createContents();
		shell.open();
		shell.layout();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

	/**
	 * Create contents of the window.
	 */
	protected void createContents() {
//		禁用窗口最大化
		shell = new Shell(style|SWT.MIN);
		shell.setImage(SWTResourceManager.getImage(MainWindows.class, "/img/2.png"));
		shell.setSize(631, 517);
		shell.setText("鑫软翻译");
		shell.setLayout(null);
		shell.setBackground(themecolor);
//		开始写输入框文本内容
		shurukuang = new Text(shell, SWT.BORDER | SWT.V_SCROLL|SWT.MULTI|SWT.WRAP);

		shurukuang.setBounds(10, 10, 396, 189);
//		获取剪切板和手动输入两类:
//		获取剪切板输入:
		
		Button btnNewButton = new Button(shell, SWT.NONE);
		btnNewButton.setText("一键翻译文字");
		btnNewButton.setBounds(10, 205, 109, 30);
		btnNewButton.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
//				从这里开始判断翻译来源 首选百度
//				GetHtmlContentUtils yUtils = new GetHtmlContentUtils();
				if(baidu==true&&tengxun==false&&youdaoyun==false&&google==false) {
				try {
					Fanyi_baidu fanyi = new Fanyi_baidu();
					 result="鑫软提示:以下翻译来自----<百度翻译>---\n"+
							 "------------------------------------------------------------\r\n" + 
								"------------------------翻译结果--------------------------\r\n"+
							 fanyi.fanyi_baidu(shurukuang.getText());
					shuchu.setText(result);
				} catch (Exception e1) {
					shuchu.setText("鑫软翻译提示:出错了!百度君说这种问题他也没遇见过!");
				}
				}
//				腾讯翻译
				if(tengxun==true&&youdaoyun==false&&baidu==false&&google==false) {
					if(new fanyi_tencent().isChinese(shurukuang.getText())) {
					result="鑫软提示:以下翻译来自腾讯云翻译\n"+
							"------------------------------------------------------------\r\n" + 
							"------------------------翻译结果--------------------------\r\n"+
							new fanyi_tencent().fanyi_tx_auto_to_en(shurukuang.getText());
					shuchu.setText(result);
					}else if(new fanyi_tencent().isEnglish(shurukuang.getText())) {
						result="鑫软提示:以下翻译来自腾讯云翻译\n"+
								"------------------------------------------------------------\r\n" + 
								"------------------------翻译结果--------------------------\r\n"+
								new fanyi_tencent().fanyi_tx_auto_to_zh(shurukuang.getText());
//						System.out.println("编码格式为:"+new encode().getEncoding(auto_to_zh(text)));
						shuchu.setText(result);
					}else {
						result="鑫软提示:以下翻译来自腾讯云翻译\n"+
								"------------------------------------------------------------\r\n" + 
								"------------------------翻译结果--------------------------\r\n"+
								"亲爱的小主:腾讯云翻译君有误,请重新输入!";
						
						shuchu.setText(result);
					}
			}
//			有道云翻译
			if(youdaoyun==true&&baidu==false&&tengxun==false&&google==false) {
				try {
					fanyi_youdaoyun fanyi = new fanyi_youdaoyun();
					result="鑫软提示:以下翻译来自有道云\n"+
					"------------------------------------------------------------\r\n" + 
					"------------------------翻译结果--------------------------\r\n"+
					fanyi.youdaoyun_fanyi(shurukuang.getText());
					shuchu.setText(result);
				} catch (Exception e2) {
					e2.printStackTrace();
					shuchu.setText("哇哦,可惜了,这么优美的词汇(句子)有道云不支持这种长句子翻译奥!推荐使用谷歌或者百度,嘿嘿!");
				}
			}
//			google翻译
			if(google==true&&youdaoyun==false&&baidu==false&&tengxun==false) {
				try {
					fanyi_google fanyi = new fanyi_google();
					if(fanyi.isEnglish(shurukuang.getText())) {
						fanyi.fanyi_Google(shurukuang.getText(), "zh");
						result="鑫软提示:以下翻译来谷歌翻译(已破解可以无限制使用!)\n"+
								"------------------------------------------------------------\r\n" + 
								"------------------------翻译结果--------------------------\r\n"+
								fanyi.fanyi_Google(shurukuang.getText(), "zh");
								shuchu.setText(result);
					}else if(fanyi.isChinese(shurukuang.getText())) {
						fanyi.fanyi_Google(shurukuang.getText(), "en");
						result="鑫软提示:以下翻译来谷歌翻译(已破解可以无限制使用!)\n"+
								"------------------------------------------------------------\r\n" + 
								"------------------------翻译结果--------------------------\r\n"+
								fanyi.fanyi_Google(shurukuang.getText(), "en");
								shuchu.setText(result);
					}
				} catch (Exception e2) {
					shuchu.setText("鑫软翻译提示:长文本翻译请使用百度(推荐)");
				}
			}
		}
	});
		shuchu = new Text(shell, SWT.BORDER | SWT.V_SCROLL|SWT.MULTI|SWT.WRAP);
		shuchu.setBounds(10, 241, 396, 199);
		
		Menu menu = new Menu(shell, SWT.BAR);
		shell.setMenuBar(menu);
		
		MenuItem menuItem = new MenuItem(menu, SWT.NONE);
		menuItem.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				new about().open();
			}
		});
		menuItem.setText("关于软件");
		
		MenuItem menuItem_1 = new MenuItem(menu, SWT.NONE);
		menuItem_1.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				new chat().open();
			}
		});
		menuItem_1.setText("联系作者");
		
		Button btnNewButton_1 = new Button(shell, SWT.NONE);

		btnNewButton_1.addSelectionListener(new SelectionAdapter(){
			public void widgetSelected(SelectionEvent e){
//				MessageDialog.openInformation(null, "", "hello");
				if(flag==true) {
					aiscan yu = new aiscan();
					shurukuang.setText(yu.ceshi());;
				}else {
					JOptionPane.showMessageDialog(yu, "请在截图后勾选切换文字识别!", "鑫软翻译提醒",JOptionPane.INFORMATION_MESSAGE);
				}
			}
		});
		
		btnNewButton_1.setBounds(297, 205, 109, 30);
		btnNewButton_1.setText("一键识别文字");
		
		Button xuanfu = new Button(shell, SWT.CHECK);
		xuanfu.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
//				全局悬浮
				if(xuanfu.getSelection()) {
					style =16384;	
					OS . SetWindowPos (shell.handle,OS.HWND_TOPMOST,396,189,604 ,521,SWT.NULL) ;
				}
				else {
					style = 32;
					OS . SetWindowPos (shell.handle,OS.HWND_NOTOPMOST,396,189 ,604 ,521,SWT.NULL);
				}
			}
		});
		xuanfu.setBounds(412, 13, 151, 20);
		xuanfu.setText("是否开启全局悬浮");
		
		Button switchmode = new Button(shell, SWT.CHECK);
		switchmode.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
//				此处切换模式
				if(switchmode.getSelection()) {
					flag=true;
				}else {
					flag=false;
				}
			}
		});
		switchmode.setBounds(412, 55, 151, 20);
		switchmode.setText("\u5207\u6362\u4E3A\u6587\u5B57\u8BC6\u522B");
		
		Button button_1 = new Button(shell, SWT.NONE);
		button_1.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				shurukuang.setText("");
			}
		});
		button_1.setBounds(153, 205, 109, 30);
		button_1.setText("一键清空输入");
		
		
		
		
		
		Combo combo = new Combo(shell, SWT.NONE);
		combo.setItems(new String[] {"百度翻译(默认推荐)", "腾讯翻译(单词)", "有道翻译(单词/词组)", "谷歌翻译(通用已破解)"});
		combo.setBounds(412, 205, 180, 28);
		combo.setText("请自助选择翻译来源");
//		使用键盘上下左右控制选择
		combo.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent e){
				//如果单击了向左的箭头按键,则选中上一个选项
				if (e.keyCode == SWT .ARROW_LEFT)
				combo.select(combo.getSelectionIndex() - 1); 
				//如果单击了向右的箭头按键,则选中下一个选项
				else if (e.keyCode == SWT.ARROW_RIGHT)
				combo.select(combo.getSelectionIndex() + 1);
		}
		});
		combo.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				
			System.out.println("组合框"+combo.getSelectionIndex()+"被点击,被点击的选项是:"+combo.getItem(combo.getSelectionIndex()));
//			------------------------------百度翻译------------------------------------
//			Fanyi_baidu fanyi = new Fanyi_baidu();
//				 result=fanyi.fanyi_baidu(shurukuang.getText());
//			切换为百度翻译
			if(combo.getSelectionIndex()==0&&combo.getSelectionIndex()!=1&&combo.getSelectionIndex()!=2&&combo.getSelectionIndex()!=3) {
				baidu=true;
				tengxun=false;
				youdaoyun=false;
				google=false;
//				切换为腾讯翻译
			}else if(combo.getSelectionIndex()==1&&combo.getSelectionIndex()!=0&&combo.getSelectionIndex()!=2&&combo.getSelectionIndex()!=3) {
				tengxun=true;
				baidu=false;
				youdaoyun=false;
				google=false;
				}else if(combo.getSelectionIndex()==2&&combo.getSelectionIndex()!=0&&combo.getSelectionIndex()!=1&&combo.getSelectionIndex()!=3) {
					youdaoyun=true;
					baidu=false;
					tengxun=false;
					google=false;
				}else if(combo.getSelectionIndex()!=0&&combo.getSelectionIndex()!=1&&combo.getSelectionIndex()!=2&&combo.getSelectionIndex()==3) {
					google=true;
					baidu=false;
					tengxun=false;
					youdaoyun=false;
				}
			}
		});
		
		
		
		
		
		Label label = new Label(shell, SWT.NONE);
		label.setBackground(SWTResourceManager.getColor(240, 240, 240));
		label.setBounds(412, 400, 176, 20);
		formToolkit.adapt(label, true, true);
		label.setText("  \u626B\u63CF\u5FAE\u4FE1\u4E8C\u7EF4\u7801\u6253\u8D4F\u4F5C\u8005");
		
		Link link = new Link(shell, SWT.NONE);
		link.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				try {
					Runtime.getRuntime().exec(
							"rundll32 url.dll,FileProtocolHandler http://www.sinsy.club");
				} catch (IOException e1) {
					
					e1.printStackTrace();
				}
			}
		});
		link.setBackground(SWTResourceManager.getColor(240, 240, 240));
		link.setBounds(444, 420, 119, 20);
		formToolkit.adapt(link, true, true);
		link.setText("<a href=\"www.sinsy.club\">www.sinsy.club</a>");
		
		Label lableforimg = new Label(shell, SWT.NONE);
		lableforimg.setBounds(426, 244, 150, 150);
		formToolkit.adapt(lableforimg, true, true);
		lableforimg.setText("");
		lableforimg.setImage(SWTResourceManager.getImage("F:\\Program Files\\eclipse ee\\resources\\new task one\\\u946B\u8F6F\u7FFB\u8BD1\\src\\img\\c.png"));
		
		Button readClib = new Button(shell, SWT.NONE);
		readClib.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
					
//					如果是图片,则保存在本地后选择复制到剪切板但是不会复制到输入框
//					savaimage yuSavaimage = new savaimage();
//					shurukuang.setText(yuSavaimage.getSysClipboardText());
//					imagepathString = yuSavaimage.getpath();   
				if(!flag2) {
					  try {
						shurukuang.setText(shurukuang.getText()+yUtils.getClipboardText());
					} catch (Exception c) {
						// 
						c.printStackTrace();
					}
				}


			}
		});
		readClib.setBounds(412, 169, 180, 30);
		formToolkit.adapt(readClib, true, true);
		readClib.setText("\u8BFB\u53D6\u526A\u5207\u677F\u5185\u5BB9");
		
		Button setempty = new Button(shell, SWT.NONE);
		setempty.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				 yUtils.setempty();
			}
		});
		setempty.setBackground(SWTResourceManager.getColor(169, 169, 169));
		setempty.setBounds(412, 135, 180, 30);
		formToolkit.adapt(setempty, true, true);
		setempty.setText("\u6E05\u7A7A\u526A\u5207\u677F");
		
		Label lblNewLabel = new Label(shell, SWT.NONE);
		lblNewLabel.setBackground(SWTResourceManager.getColor(192, 192, 192));
		lblNewLabel.setBounds(412, 99, 180, 20);
		formToolkit.adapt(lblNewLabel, true, true);
		lblNewLabel.setText("\u611F\u8C22\u60A8\u4F7F\u7528SINSY\u5FEB\u6377\u7FFB\u8BD1");

	}
//	public String auto_to_zh(String text) {
//     return new fanyi_tencent(). fanyi_tx_auto_to_zh(text);
//	}
//	public String auto_to_en() {
//		encode en= new encode();
//		System.out.println("输入框的文字编码格式是:"+en.getEncoding(shurukuang.getText()));
//		en.translate(shurukuang.getText(),"GB2312","utf-8");
//     	System.out.println("转换后文字编码格式是:"+en.getEncoding(en.translate(shurukuang.getText(),"GB2312","utf-8")));
//     	System.out.println(en.translate(shurukuang.getText(),"GB2312","gbk"));
//		return new fanyi_tencent().fanyi_tx_auto_to_en(en.translate(shurukuang.getText(),"GB2312","gb2312"));
//	}
}

与作者交流界面代码:

package com.sinsy;

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.widgets.Label;
import java.io.IOException;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Link;

public class chat {
//shell进程的主进程:创建一个shell对象
	protected Shell shell;
/**	main方法()调用,用void java.lang.Throwable.printStackTrace()
 * 打出异常
 * @param fntp
 */
	public static void main(String[] args) {
		try {
			chat window = new chat();
			window.open();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}


	/**
	 * Open the window.问题bug出在这里:
	 */
	public synchronized void open() {
		Display display = Display.getDefault();
		createContents();
		shell.open();
		shell.layout();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}
//	处理异常问题:
//	public void start() {
//        Display.getDefault().asyncExec(new Runnable() {
//            @Override
//            public void run() {
//               createContents();
//            }
//        });
//    }

	/**
	 * Create contents of the window.
	 */
	protected void createContents() {

//		shell = new Shell(new Display(), SWT.MIN);
        shell = new Shell(SWT.CLOSE);              
		shell.setImage(SWTResourceManager.getImage(chat.class, "/img/1.png"));
		shell.setSize(466, 363);
		shell.setText("\u4E0E\u4F5C\u8005\u4EA4\u6D41");
		Label lblNewLabel = new Label(shell, SWT.NONE);
		lblNewLabel.setImage(SWTResourceManager.getImage(chat.class, "/img/2.png"));
		lblNewLabel.setBounds(133, 21, 168, 173);
		Link link = new Link(shell, SWT.NONE);
		link.setBounds(167, 203, 131, 31);
		link.setText("\u70B9\u51FB<A>\u6B64\u5904</A>\u8054\u7CFB\u4F5C\u8005");
		
		Label label = new Label(shell, SWT.NONE);
		label.setBounds(31, 238, 403, 20);
		label.setText("\u66F4\u591A\u5B9E\u7528\u5DE5\u5177\u8BF7\u5173\u6CE8\u946B\u8F6F\u5DE5\u4F5C\u5BA4\u5B98\u7F51\uFF0C\u5173\u6CE8\u5FAE\u7C73\u5DE5\u4F5C\u5BA4\u5B98\u7F51");
		
		Label label_1 = new Label(shell, SWT.NONE);
		label_1.setBounds(91, 264, 314, 20);
		label_1.setText("\u6B22\u8FCE\u5404\u4F4D\u5F00\u53D1\u8005\u4EE5\u53CA\u7528\u6237\u4E3A\u6211\u4EEC\u63D0\u4F9B\u5B9D\u8D35\u5EFA\u8BAE");
		link.addSelectionListener(new SelectionAdapter(){
	public void widgetSelected(SelectionEvent event){
		try {
			Runtime.getRuntime().exec(
			"rundll32 url.dll,FileProtocolHandler http://wpa.qq.com/msgrd?v=3&uin=358566760&site=qq&menu=yes");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 

	}
});
		
	}

}

关于软件的代码:

package com.sinsy;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Label;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;

public class about {

	protected Shell shell;

	/**
	 * Launch the application.
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			about window = new about();
			window.open();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
	/**
	 * Open the window.
	 */
	public void open() {
		Display display = Display.getDefault();
		 Display.getDefault().syncExec(new Runnable() {
			    public void run() {
			    	createContents();
			    }
			    }); 
		shell.open();
		shell.layout();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

	/**
	 * Create contents of the window.
	 * @wbp.parser.entryPoint
	 */
	protected void createContents() {
		shell = new Shell(SWT.MIN);
		shell.setImage(SWTResourceManager.getImage(about.class, "/img/1.png"));
		shell.setSize(406, 378);
		shell.setText("\u5173\u4E8E\u672C\u8F6F\u4EF6");
		Label lblNewLabel = new Label(shell, SWT.NONE);
		lblNewLabel.setBounds(147, 222, 102, 20);
		lblNewLabel.setText("\u946B\u8F6F\u7FFB\u8BD1beta");
		Label lblNewLabel_1 = new Label(shell, SWT.NONE);
		lblNewLabel_1.setImage(SWTResourceManager.getImage("F:\\Program Files\\eclipse ee\\resources\\new task one\\鑫软翻译\\src\\img\\logo.png"));
		lblNewLabel_1.setBounds(-73, -79, 420, 303);
		
		Label label = new Label(shell, SWT.NONE);
		label.setBounds(36, 302, 339, 20);
		label.setText("\u7834\u89E3\u63A5\u53E3\u4EC5\u4F9B\u5B66\u4E60\u4EA4\u6D41\uFF0C\u5176\u4ED6\u63A5\u53E3\u8BBF\u95EE\u53D7\u9650\u8BF7\u8C05\u89E3!");
		
		Link link = new Link(shell, SWT.NONE);
		link.setBounds(36, 276, 361, 20);
		link.setText("\u5144\u5F1F\u56E2\u961F\uFF1A\u5FAE\u7C73\u5DE5\u4F5C\u5BA4<a>www.micronnetwork.com</a>");
		
		Link link_1 = new Link(shell, SWT.NONE);
		link_1.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				
			}
		});
		link_1.setBounds(94, 250, 264, 20);
		link_1.setText("\u946B\u8F6F\u5DE5\u4F5C\u5BA4\u5B98\u7F51:<a>www.sinsy.club</a>");

	}
}

重磅的来了:百度的API使用:

1.百度翻译核心代码

package com.sinsy.fanyi.baidu;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class Fanyi_baidu {

    // 在平台申请的APP_ID 详见 http://api.fanyi.baidu.com/api/trans/product/desktop?req=developer
    private static final String APP_ID = "您的APPID";
    private static final String SECURITY_KEY = "APPKEY";

//    public static void main(String[] args) {
    public  String fanyi_baidu(String string) {
        TransApi api = new TransApi(APP_ID, SECURITY_KEY);

        String query = string;
        String str = api.getTransResult(query, "auto", "auto"); //中文翻译英文
//        System.out.println(str);   //输出结果即json字段
        JsonObject  jsonObj = (JsonObject)new JsonParser().parse(str);//解析json字段
        String res = jsonObj.get("trans_result").toString();//获取json字段中的 result字段,因为result字段本身即是�?个json数组字段,所以要进一步解�?
        JsonArray  js = new JsonParser().parse(res).getAsJsonArray();//解析json数组字段
        jsonObj = (JsonObject)js.get(0);//result数组中只有一个元素,�?以直接取第一个元�?
//        ssSystem.out.println(jsonObj.get("dst").getAsString());//得到dst字段,即译文,并输出
//        System.out.println(api.getTransResult(query, "auto", "en"));
		return jsonObj.get("dst").getAsString();
    }
//public static void main(String[] args) {
//	System.out.println(fanyi_baidu("System out println(api.getTransResult(query, \"auto\", \"en\"));"));
//}
}

2.Http访问代码:

package com.sinsy.fanyi.baidu;

import java.io.BufferedReader;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Map;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

class HttpGet {
    protected static final int SOCKET_TIMEOUT = 10000; // 10S
    protected static final String GET = "GET";

    public static String get(String host, Map<String, String> params) {
        try {
            // 设置SSLContext
            SSLContext sslcontext = SSLContext.getInstance("TLS");
            sslcontext.init(null, new TrustManager[] { myX509TrustManager }, null);

            String sendUrl = getUrlWithQueryString(host, params);

            // System.out.println("URL:" + sendUrl);

            URL uri = new URL(sendUrl); // 创建URL对象
            HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
            if (conn instanceof HttpsURLConnection) {
                ((HttpsURLConnection) conn).setSSLSocketFactory(sslcontext.getSocketFactory());
            }

            conn.setConnectTimeout(SOCKET_TIMEOUT); // 设置相应超时
            conn.setRequestMethod(GET);
            int statusCode = conn.getResponseCode();
            if (statusCode != HttpURLConnection.HTTP_OK) {
                System.out.println("Http错误码:" + statusCode);
            }

            // 读取服务器的数据
            InputStream is = conn.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            StringBuilder builder = new StringBuilder();
            String line = null;
            while ((line = br.readLine()) != null) {
                builder.append(line);
            }

            String text = builder.toString();

            close(br); // 关闭数据�?
            close(is); // 关闭数据�?
            conn.disconnect(); // 断开连接

            return text;
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }

        return null;
    }

    public static String getUrlWithQueryString(String url, Map<String, String> params) {
        if (params == null) {
            return url;
        }

        StringBuilder builder = new StringBuilder(url);
        if (url.contains("?")) {
            builder.append("&");
        } else {
            builder.append("?");
        }

        int i = 0;
        for (String key : params.keySet()) {
            String value = params.get(key);
            if (value == null) { // 过滤空的key
                continue;
            }

            if (i != 0) {
                builder.append('&');
            }

            builder.append(key);
            builder.append('=');
            builder.append(encode(value));

            i++;
        }

        return builder.toString();
    }

    protected static void close(Closeable closeable) {
        if (closeable != null) {
            try {
                closeable.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 对输入的字符串进行URL编码, 即转换为%20这种形式
     * 
     * @param input 原文
     * @return URL编码. 如果编码失败, 则返回原�?
     */
    public static String encode(String input) {
        if (input == null) {
            return "";
        }

        try {
            return URLEncoder.encode(input, "utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        return input;
    }

    private static TrustManager myX509TrustManager = new X509TrustManager() {

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }
    };

}

3.MD5代码:

package com.sinsy.fanyi.baidu;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * MD5编码相关的类
 * 
 * @author wangjingtao
 * 
 */
public class MD5 {
    // 首先初始化一个字符数组,用来存放每个16进制字符
    private static final char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd',
            'e', 'f' };

    /**
     * 获得�?个字符串的MD5�?
     * 
     * @param input 输入的字符串
     * @return 输入字符串的MD5�?
     * 
     */
    public static String md5(String input) {
        if (input == null)
            return null;

        try {
            // 拿到�?个MD5转换器(如果想要SHA1参数换成”SHA1”)
            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
            // 输入的字符串转换成字节数�?
            byte[] inputByteArray = null;
			try {
				inputByteArray = input.getBytes("utf-8");
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
            // inputByteArray是输入字符串转换得到的字节数�?
            messageDigest.update(inputByteArray);
            // 转换并返回结果,也是字节数组,包�?16个元�?
            byte[] resultByteArray = messageDigest.digest();
            // 字符数组转换成字符串返回
            return byteArrayToHex(resultByteArray);
        } catch (NoSuchAlgorithmException e) {
            return null;
        }
    }
    public static String md5(File file) {
        try {
            if (!file.isFile()) {
                System.err.println("文件" + file.getAbsolutePath() + "不存在或者不是文�?");
                return null;
            }

            FileInputStream in = new FileInputStream(file);

            String result = md5(in);

            in.close();

            return result;

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

    public static String md5(InputStream in) {

        try {
            MessageDigest messagedigest = MessageDigest.getInstance("MD5");

            byte[] buffer = new byte[1024];
            int read = 0;
            while ((read = in.read(buffer)) != -1) {
                messagedigest.update(buffer, 0, read);
            }

            in.close();

            String result = byteArrayToHex(messagedigest.digest());

            return result;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

    private static String byteArrayToHex(byte[] byteArray) {
        // new�?个字符数组,这个就是用来组成结果字符串的(解释一下:�?个byte是八位二进制,也就是2位十六进制字符(2�?8次方等于16�?2次方))
        char[] resultCharArray = new char[byteArray.length * 2];
        // 遍历字节数组,�?�过位运算(位运算效率高),转换成字符放到字符数组中�?
        int index = 0;
        for (byte b : byteArray) {
            resultCharArray[index++] = hexDigits[b >>> 4 & 0xf];
            resultCharArray[index++] = hexDigits[b & 0xf];
        }

        // 字符数组组合成字符串返回
        return new String(resultCharArray);

    }

}

4.翻译的API配置核心:

package com.sinsy.fanyi.baidu;

import java.util.HashMap;
import java.util.Map;

public class TransApi {
    private static final String TRANS_API_HOST = "http://api.fanyi.baidu.com/api/trans/vip/translate";

    private String appid;
    private String securityKey;

    public TransApi(String appid, String securityKey) {
        this.appid = appid;
        this.securityKey = securityKey;
    }

    public String getTransResult(String query, String from, String to) {
        Map<String, String> params = buildParams(query, from, to);
        return HttpGet.get(TRANS_API_HOST, params);
    }

    private Map<String, String> buildParams(String query, String from, String to) {
        Map<String, String> params = new HashMap<String, String>();
        params.put("q", query);
        params.put("from", from);
        params.put("to", to);

        params.put("appid", appid);

        // 随机�?
        String salt = String.valueOf(System.currentTimeMillis());
        params.put("salt", salt);

        // 签名
        String src = appid + query + salt + securityKey; // 加密前的原文
        params.put("sign", MD5.md5(src));

        return params;
}
}

谷歌翻译API使用:

1.谷歌Http服务代码:

package com.sinsy.fanyi.google;

import java.net.InetSocketAddress;
import java.net.Proxy;

public class Browser {

    public Proxy proxy;
    public String url;

    public String getUrl() {
        return this.url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public Proxy getProxy() {
        return this.proxy;
    }

    public void setProxy(String ip, Integer port) {
        this.proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(ip, port.intValue()));
    }

    public String executeGet()
            throws Exception {
        String result;
        if (this.proxy != null)
            result = HttpClientUtil.doGetWithProxy(this.url, this.proxy);
        else {
            result = HttpClientUtil.doGet(this.url);
        }

        return result;
    }
}

2.最终json处理实现代码:

package com.sinsy.fanyi.google;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class fanyi_google {
//	public static void main(String[] args) throws Exception {
//		   // 普通方式初始化
//        GoogleApi googleApi = new GoogleApi();
//        // 通过代理
        GoogleApi googleApi = new GoogleApi("122.224.227.202", 3128);
//        String result = googleApi.translate("哈哈",  "auto");
//        String result2= googleApi.translate("Your mother die",  "auto");
//        System.out.println(result);
//        System.out.println(result2);
//	Your mother die
//	Your mother die
//	}
	 public String fanyi_Google(String str,String target_en_zh) throws Exception {
	        // 普通方式初始化
	        GoogleApi googleApi = new GoogleApi();
	        // 通过代理
//	        GoogleApi googleApi = new GoogleApi("122.224.227.202", 3128);
	        String result = googleApi.translate(str,  target_en_zh);
//	        System.out.println(result);
			return result;
	    }
	   public  boolean isEnglish(String charaString){
//		   ^[[A-Za-z]|\\s]+$
//	      return charaString.matches("^[a-zA-Z]*");
		   return charaString.matches("^[[A-Za-z]|\\s]+$");
	    }
	//   是否是中文判断(正则表达式)
	  public  boolean isChinese(String str){
	      String regEx = "[\\u4e00-\\u9fa5]+";
	      Pattern p = Pattern.compile(regEx);
	      Matcher m = p.matcher(str);
	     if(m.find())
	       return true;
	     else
	       return false;
	   }
}

3.谷歌接口API代码

package com.sinsy.fanyi.google;
import com.alibaba.fastjson.JSONArray;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URLEncoder;

public class GoogleApi {

    private static final String PATH = "./gettk.js";

    static ScriptEngine engine = null;

    private Browser browser = null;

    static {
        ScriptEngineManager maneger = new ScriptEngineManager();
        engine = maneger.getEngineByName("javascript");
        FileInputStream fileInputStream = null;
        Reader scriptReader = null;

        try {
            scriptReader = new InputStreamReader(GoogleApi.class.getResourceAsStream(PATH), "utf-8");
            engine.eval(scriptReader);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (fileInputStream != null) {
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (scriptReader != null) {
                try {
                    scriptReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public GoogleApi() {
        this.browser = new Browser();
    }

    public GoogleApi(String ip, Integer port) {
        this.browser = new Browser();
        this.browser.setProxy(ip, port);
    }

    public String getTKK() throws Exception {
        browser.setUrl("https://translate.google.cn/");

        try {
            String result = browser.executeGet();
            if (StringUtils.isNotBlank(result)) {
                if (result.indexOf("tkk") > -1) {
                    String matchString = RegularUtil.findMatchString(result, "tkk:.*?',");
                    String tkk = matchString.substring(5, matchString.length() - 2);
                    return tkk;
                }
            }
        } catch (Exception e) {
            throw new RuntimeException("获取 tkk 出错");
        }

        return null;
    }

    public static String getTK(String word, String tkk) {
        String result = null;

        try {
            if (engine instanceof Invocable) {
                Invocable invocable = (Invocable) engine;
                result = (String) invocable.invokeFunction("tk", new Object[]{word, tkk});
            }
        } catch (Exception e) {
            throw new RuntimeException("获取 tk 出错");
        }

        return result;
    }

    public String translate(String word, String from, String to) throws Exception {
        if (StringUtils.isBlank(word)) {
            return null;
        }

        String tkk = getTKK();

        if (StringUtils.isBlank(tkk)) {
            throw new RuntimeException("无法获取 tkk");
        }

        String tk = getTK(word, tkk);

        try {
            word = URLEncoder.encode(word, "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
        }

        StringBuffer buffer = new StringBuffer("https://translate.google.cn/translate_a/single?client=t");

        if (StringUtils.isBlank(from)) {
            from = "auto";
        }

        buffer.append("&sl=" + from);
        buffer.append("&tl=" + to);
        buffer.append("&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&ie=UTF-8&oe=UTF-8&source=btn&kc=0");
        buffer.append("&tk=" + tk);
        buffer.append("&q=" + word);
        browser.setUrl(buffer.toString());

        try {
            String result = browser.executeGet();
            JSONArray array = (JSONArray) JSONArray.parse(result);
            JSONArray rArray = array.getJSONArray(0);
            StringBuffer rBuffer = new StringBuffer();
            for (int i = 0; i < rArray.size(); i++) {
                String r = rArray.getJSONArray(i).getString(0);
                if (StringUtils.isNotBlank(r)) {
                    rBuffer.append(r);
                }
            }

            return rBuffer.toString();
        } catch (Exception e) {
            throw new RuntimeException("结果集解析出错");
        }
    }

    /**
     * 自动检测源语言
     *
     * @param word 要翻译的词
     * @param to   翻译的目标语言, 参考谷歌接口
     * @return
     * @throws Exception
     */
    public String translate(String word, String to) throws Exception {
        return translate(word, null, to);
    }
}

4.谷歌工具类:

package com.sinsy.fanyi.google;
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.net.Proxy;
import java.net.URI;
import java.util.Map;

public class HttpClientUtil {

    public static final int SO_TIMEOUT_MS = 8000;
    public static final int CONNECTION_TIMEOUT_MS = 1000;

    public static String doGet(String url, Map<String, String> param) {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        String resultString = "";
        CloseableHttpResponse response = null;
        try {
            URIBuilder builder = new URIBuilder(url);
            if (param != null) {
                for (String key : param.keySet()) {
                    builder.addParameter(key, (String) param.get(key));
                }
            }
            URI uri = builder.build();

            HttpGet httpGet = new HttpGet(uri);

            response = httpclient.execute(httpGet);

            if (response.getStatusLine().getStatusCode() == 200)
                resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (response != null) {
                    response.close();
                }
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }

    public static String doGet(String url, Map<String, String> param, Proxy proxy) throws Exception {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        String resultString = "";
        CloseableHttpResponse response = null;
        try {
            URIBuilder builder = new URIBuilder(url);
            if (param != null) {
                for (String key : param.keySet()) {
                    builder.addParameter(key, (String) param.get(key));
                }
            }
            URI uri = builder.build();

            HttpGet httpGet = new HttpGet(uri);
            httpGet.setConfig(buildRequestConfig(proxy));

            response = httpclient.execute(httpGet);

            if (response.getStatusLine().getStatusCode() == 200)
                resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
        } catch (Exception e) {
            throw e;
        } finally {
            try {
                if (response != null) {
                    response.close();
                }
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }

    public static String doGetWithProxy(String url, Proxy proxy) throws Exception {
        return doGet(url, null, proxy);
    }

    public static String doGet(String url) {
        return doGet(url, null);
    }

    public static RequestConfig buildRequestConfig(Proxy proxy) {
        String address = proxy.address().toString();
        String[] addressArr = address.replace("/", "").split(":");
        String ip = addressArr[0].trim();
        String host = addressArr[1].trim();

        if ((proxy != null) && (!(StringUtils.isBlank(ip))) && (!(StringUtils.isBlank(host)))) {
            HttpHost httpHost = new HttpHost(ip, Integer.parseInt(host));
            RequestConfig requestConfig = RequestConfig.custom().setProxy(httpHost)
                    .setSocketTimeout(SO_TIMEOUT_MS)
                    .setConnectTimeout(CONNECTION_TIMEOUT_MS).build();
            return requestConfig;
        }

        RequestConfig requestConfig = RequestConfig.custom()
                .setSocketTimeout(SO_TIMEOUT_MS)
                .setConnectTimeout(CONNECTION_TIMEOUT_MS).build();
        return requestConfig;
    }
}

5.谷歌正则工具类(CSDN网友提供的开源代码:作者:huangwenjun)

package com.sinsy.fanyi.google;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegularUtil {

    public static String extractByStartAndEnd(String str, String startStr, String endStr) {
        String regEx = startStr + ".*?"+endStr;
        String group = findMatchString(str, regEx);
        String trim = group.replace(startStr, "").replace(endStr, "").trim();
        return trim(trim);
    }

    public static String findMatchString(String str, String regEx) {
        try {
            // 编译正则表达式
            Pattern pattern = Pattern.compile(regEx);
            // 忽略大小写的写法
            Matcher matcher = pattern.matcher(str);
            // 字符串是否与正则表达式相匹配
            return findFristGroup(matcher);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    private static String findFristGroup(Matcher matcher) {
        matcher.find();
        return matcher.group(0);
    }

    /**
     * 去除字符串中所包含的空格(包括:空格(全角,半角)、制表符、换页符等)
     * @param s
     * @return
     */
    public static String removeAllBlank(String s){
        String result = "";
        if(null!=s && !"".equals(s)){
            result = s.replaceAll("[ *| *| *|//s*]*", "");
        }
        return result;
    }

    /**
     * 去除字符串中头部和尾部所包含的空格(包括:空格(全角,半角)、制表符、换页符等)
     * @param s
     * @return
     */
    public static String trim(String s){
        String result = "";
        if(null!=s && !"".equals(s)){
            result = s.replaceAll("^[ *| *| *|//s*]*", "").replaceAll("[ *| *| *|//s*]*$", "");
        }
        return result;
    }
}

7.谷歌字符串自定义方法:

package com.sinsy.fanyi.google;

/**
fntp
 **/
public class StringUtils {

    public static boolean isBlank(String string) {
        if (string == null || "".equals(string.trim())) {
            return true;
        }

        return false;
    }

    public static boolean isNotBlank(String string) {
        return !isBlank(string);
    }
}

8.工具js

var b = function (a, b) {
	for (var d = 0; d < b.length - 2; d += 3) {
		var c = b.charAt(d + 2),
			c = "a" <= c ? c.charCodeAt(0) - 87 : Number(c),
			c = "+" == b.charAt(d + 1) ? a >>> c : a << c;
		a = "+" == b.charAt(d) ? a + c & 4294967295 : a ^ c
	}
	return a
}

var tk =  function (a,TKK) {
	for (var e = TKK.split("."), h = Number(e[0]) || 0, g = [], d = 0, f = 0; f < a.length; f++) {
		var c = a.charCodeAt(f);
		128 > c ? g[d++] = c : (2048 > c ? g[d++] = c >> 6 | 192 : (55296 == (c & 64512) && f + 1 < a.length && 56320 == (a.charCodeAt(f + 1) & 64512) ? (c = 65536 + ((c & 1023) << 10) + (a.charCodeAt(++f) & 1023), g[d++] = c >> 18 | 240, g[d++] = c >> 12 & 63 | 128) : g[d++] = c >> 12 | 224, g[d++] = c >> 6 & 63 | 128), g[d++] = c & 63 | 128)
	}
	a = h;
	for (d = 0; d < g.length; d++) a += g[d], a = b(a, "+-a^+6");
	a = b(a, "+-3^+b+-f");
	a ^= Number(e[1]) || 0;
	0 > a && (a = (a & 2147483647) + 2147483648);
	a %= 1E6;
	return a.toString() + "." + (a ^ h)
}

腾讯翻译代码:

1.基础实现类:


package com.sinsy.fanyi.tencent;

import java.io.UnsupportedEncodingException;

public class encode {
	 public String translate(String str, String srcEncode,String dstEncode) {
		      String tempStr = "";
		    try {
		         tempStr = new String(str.getBytes(srcEncode),dstEncode);
		     } catch (UnsupportedEncodingException e) {
		         // TODO Auto-generated catch block
		         e.printStackTrace();
		     }
		     return tempStr;
		}
	 public  String getEncoding(String str) {
		 String encode = "GB2312";
		 try {
		 if (str.equals(new String(str.getBytes(encode), encode))) {
		 String s = encode;
		 return s;
		 }
		 } catch (Exception exception) {
		 }
		 encode = "ISO-8859-1";
		 try {
		 if (str.equals(new String(str.getBytes(encode), encode))) {
		 String s1 = encode;
		 return s1;
		 }
		 } catch (Exception exception1) {
		 }
		 encode = "UTF-8";
		 try {
		 if (str.equals(new String(str.getBytes(encode), encode))) {
		 String s2 = encode;
		 return s2;
		 }
		 } catch (Exception exception2) {
		 }
		 encode = "GBK";
		 try {
		 if (str.equals(new String(str.getBytes(encode), encode))) {
		 String s3 = encode;
		 return s3;
		 }
		 } catch (Exception exception3) {
		 }
		 return "";
		 }
}

2.实现方法

package com.sinsy.fanyi.tencent;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.swt.widgets.Text;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.sinsy.MainWindows;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.tmt.v20180321.TmtClient;
import com.tencentcloudapi.tmt.v20180321.models.TextTranslateRequest;
import com.tencentcloudapi.tmt.v20180321.models.TextTranslateResponse;
public class fanyi_tencent
{
//	//测试判断中英文:
//	   public static void main(String[] args){
//		if(new fanyi_tencent().isEnglish("Hello I am pitty")) {
//			System.out.println(new fanyi_tencent().fanyi_tx_auto_to_zh("you are a boy"));
//		}
//		if(new fanyi_tencent().isChinese("梦想并非都是和遥不可及")) {
//			System.out.println(new fanyi_tencent().fanyi_tx_auto_to_en("梦想并非都是和遥不可及"));
//		}
//	}
//	public String result_zh="";
//	public String result_EN="";
//	 public fanyi_tencent(Text text) {
//			if(isEnglish(text.getText())) {
//			result_EN+=fanyi_tx_auto_to_zh(text.getText());
//		}
//		if(isChinese(text.getText())) {
//			result_zh+=fanyi_tx_auto_to_en(text.getText());
//		}
//	 }
//	测试方法被我屏蔽了	
//    public static void main(String [] args) {

//            HttpProfile httpProfile = new HttpProfile();
//            httpProfile.setEndpoint("tmt.tencentcloudapi.com");
//
//            ClientProfile clientProfile = new ClientProfile();
//            clientProfile.setHttpProfile(httpProfile);
//            
//            TmtClient client = new TmtClient(cred, "ap-beijing", clientProfile);
//            
//            String params = "{\"SourceText\":\"你好!\",\"Source\":\"auto\",\"Target\":\"en\",\"ProjectId\":1183364}";
//            TextTranslateRequest req = TextTranslateRequest.fromJsonString(params, TextTranslateRequest.class);
//            
//            TextTranslateResponse resp = client.TextTranslate(req);
//            
//            System.out.println(TextTranslateRequest.toJsonString(resp));
            测试中英文互译
            测试第一个英文:
//            System.out.println("梦想并非都是遥不可及!"+"调用腾讯翻译(auto--en)结果为:"
//            			+new fanyi_tencent().fanyi_tx_auto_to_en("梦想并非都是遥不可及!"));
//            System.out.println("I love you"+"调用腾讯翻译(auto--zh)结果为:"
//        			+new fanyi_tencent().fanyi_tx_auto_to_zh("I love you"));
//        } catch (TencentCloudSDKException e) {
//                System.out.println(e.toString());
//        }
//
//    }
	 public static void main(String[] args) {
		fanyi_tencent yu= new fanyi_tencent();
		System.out.println(yu.fanyi_tx_auto_to_en("我不知道为什么腾讯云的产品会出错"));
	}
//    这里是中译英
	 public  String fanyi_tx_auto_to_en(String str) {
	    	String result = null;
//	    	System.out.println("腾讯翻译中文译英文接收到的对象是:"+str);
	        try{
	            Credential cred = new Credential("您的APPID", "您的APPKEY");
	            HttpProfile httpProfile = new HttpProfile();
	            httpProfile.setEndpoint("tmt.tencentcloudapi.com");
	            ClientProfile clientProfile = new ClientProfile();
	            clientProfile.setHttpProfile(httpProfile);
	            TmtClient client = new TmtClient(cred, "ap-beijing", clientProfile);
	            String params = "{\"SourceText\":\""+str+"\",\"Source\":\"auto\",\"Target\":\"en\",\"ProjectId\":1183364}";
	            TextTranslateRequest req = TextTranslateRequest.fromJsonString(params, TextTranslateRequest.class);
	            TextTranslateResponse resp = client.TextTranslate(req);
//	            创建一个json对象
//	         解析json
	            String json_result = TextTranslateRequest.toJsonString(resp);
	            System.out.println("返回的json对象的值是:"+ json_result );
//	           创建对象
	            JsonObject  jsonObj = (JsonObject)new JsonParser().parse(json_result);
	            String res = jsonObj.get("TargetText").toString();
	           result = res.replaceAll("\"", "");
	           System.out.println("中文翻译成英文的结果是:"+result);
	        } catch (TencentCloudSDKException e) {
	                System.out.println(e.toString());
	        }
	        return result;
	    }
//   这里是英文到中文
   public  String fanyi_tx_auto_to_zh(String str) {
   	String result = null;
       try{
           Credential cred = new Credential("您的APPID", "您的APPKEY");
           HttpProfile httpProfile = new HttpProfile();
           httpProfile.setEndpoint("tmt.tencentcloudapi.com");
           ClientProfile clientProfile = new ClientProfile();
           clientProfile.setHttpProfile(httpProfile);
           TmtClient client = new TmtClient(cred, "ap-beijing", clientProfile);
           String params = "{\"SourceText\":\""+str+"\",\"Source\":\"auto\",\"Target\":\"zh\",\"ProjectId\":1183364}";
           TextTranslateRequest req = TextTranslateRequest.fromJsonString(params, TextTranslateRequest.class);
           TextTranslateResponse resp = client.TextTranslate(req);
//           创建一个json对象
//        解析json
           String json_result = TextTranslateRequest.toJsonString(resp);
//          创建对象
           JsonObject  jsonObj = (JsonObject)new JsonParser().parse(json_result);
           String res = jsonObj.get("TargetText").toString();
        result = res.replaceAll("\"", "");
       } catch (TencentCloudSDKException e) {
               System.out.println(e.toString());
       }
       return result;
   }
/**
* author fntp 
* 腾讯大大不支持互译,我自己写的判断
*/
 /**
  * isenglish判断
  * @param c
  * @return
  */
  public  boolean isEnglish(String charaString){
//	   ^[[A-Za-z]|\\s]+$
//     return charaString.matches("^[a-zA-Z]*");
	   return charaString.matches("^[[A-Za-z]|\\s]+$");
   }
//  是否是中文判断(正则表达式)
 public  boolean isChinese(String str){
     String regEx = "[\\u4e00-\\u9fa5]+";
     Pattern p = Pattern.compile(regEx);
     Matcher m = p.matcher(str);
    if(m.find())
      return true;
    else
      return false;
  }
//private String zh_to_en(String str) {
// String result = "";
// try{
//     Credential cred = new 
//     HttpProfile httpProfile = new HttpProfile();
//     httpProfile.setEndpoint("tmt.tencentcloudapi.com");
//     ClientProfile clientProfile = new ClientProfile();
//     clientProfile.setHttpProfile(httpProfile);
//     TmtClient client = new TmtClient(cred, "ap-beijing", clientProfile);
//     String params = "{\"SourceText\":\""+str+"\",\"Source\":\"zh\",\"Target\":\"en\",\"ProjectId\":1183364}";
//     TextTranslateRequest req = TextTranslateRequest.fromJsonString(params, TextTranslateRequest.class);
//     TextTranslateResponse resp = client.TextTranslate(req);
//     String json_result = TextTranslateRequest.toJsonString(resp);
//     System.out.println("返回的json对象的值是:"+ json_result );
    创建对象
//     JsonObject  jsonObj = (JsonObject)new JsonParser().parse(json_result);
//     String res = jsonObj.get("TargetText").toString();
//    result = res.replaceAll("\"", "");
//    System.out.println("现在中文翻译成英文的结果是:"+result);
// } catch (TencentCloudSDKException e) {
//         System.out.println(e.toString());
// }
// return result;
//
//}
}

有道云代码:

1.有道云核心代码:

package com.sinsy.fanyi.youdaoyun;
//应用ID:61049bb82284c382
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;


public class fanyi_youdaoyun {

    private static Logger logger = LoggerFactory.getLogger(fanyi_youdaoyun.class);

    private static final String YOUDAO_URL = "https://openapi.youdao.com/api";

    private static final String APP_KEY = "您的APPKEY";

    private static final String APP_SECRET = "您的APP密码";
    
    public static  String thefirst_str="";
//    public static void main(String[] args) {
//		try {
//			fanyi_youdaoyun("dream");
//		} catch (IOException e) {
//			// TODO Auto-generated catch block
//			System.out.println(e.toString());
//		}
//	}
    public   String  youdaoyun_fanyi(String  str) throws IOException {
    	String result="";
        Map<String,String> params = new HashMap<String,String>();
        String q = str;
        String salt = String.valueOf(System.currentTimeMillis());
        params.put("from", "auto");
        params.put("to", "auto");
        params.put("signType", "v3");
        String curtime = String.valueOf(System.currentTimeMillis() / 1000);
        params.put("curtime", curtime);
        String signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET;
        String sign = getDigest(signStr);
        params.put("appKey", APP_KEY);
        params.put("q", q);
        params.put("salt", salt);
        params.put("sign", sign);
        /** 处理结果 */
        System.out.println("打印结果");
        requestForHttp(YOUDAO_URL,params);
        pipei yu = new pipei();
        for (int i = 0; i < yu.Keysplit(thefirst_str).size(); i++) {
//        	System.out.println("第"+(i+1)+"条相关单词是:"+yu.Keysplit(a).get(i));
        	result+="第"+(i+1)+"条相关单词是:"+yu.Keysplit(thefirst_str).get(i)+"\n";
//        	System.out.println("第"+(i+1)+"条单词解释是:"+yu.valuesplit(a).get(i));
        	result+="第"+(i+1)+"条单词解释是:"+yu.valuesplit(thefirst_str).get(i)+"\n";
		}
//        System.out.println(result);s
		return result;
    }

    public static void requestForHttp(String url,Map<String,String> params) throws IOException {
    	String a="";
        /** 创建HttpClient */
        CloseableHttpClient httpClient = HttpClients.createDefault();

        /** httpPost */
        HttpPost httpPost = new HttpPost(url);
        List<NameValuePair> paramsList = new ArrayList<NameValuePair>();
        Iterator<Map.Entry<String,String>> it = params.entrySet().iterator();
        while(it.hasNext()){
            Map.Entry<String,String> en = it.next();
            String key = en.getKey();
            String value = en.getValue();
            paramsList.add(new BasicNameValuePair(key,value));
        }
        httpPost.setEntity(new UrlEncodedFormEntity(paramsList,"UTF-8"));
        CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
        try{
            Header[] contentType = httpResponse.getHeaders("Content-Type");
            logger.info("Content-Type:" + contentType[0].getValue());
            if("audio/mp3".equals(contentType[0].getValue())){
                //如果响应是wav
                HttpEntity httpEntity = httpResponse.getEntity();
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                httpResponse.getEntity().writeTo(baos);
                byte[] result = baos.toByteArray();
                EntityUtils.consume(httpEntity);
                if(result != null){//合成成功
                    String file = "合成的音频存储路径"+System.currentTimeMillis() + ".mp3";
                    byte2File(result,file);
                }
            }else{
                /** 响应不是音频流,直接显示结果 */
                HttpEntity httpEntity = httpResponse.getEntity();
                String json = EntityUtils.toString(httpEntity,"UTF-8");
                EntityUtils.consume(httpEntity);
                logger.info(json);
//                System.out.println("json结果是:如下");
                String json_result = json;
//               创建一个json解析对象
                System.out.println("原返回的json值是:"+json);
                JsonObject  jsonObj = (JsonObject)new JsonParser().parse(json_result);
                String res = jsonObj.get("web").toString();
//                获取指定字段value
                System.out.println("第一次转换后结果是:"+res);
                int count=0;
              for (int i = 0; i < res.length(); i++) {
            	  if(res.charAt(i)!='{'&&res.charAt(i)!='['&&res.charAt(i)!='"'&&res.charAt(i)!=']'&&res.charAt(i)!='}') {
            		  		a=a+res.charAt(i);
            	  }  
            	  count++;
			}
              a=a+",";
               System.out.println("经过"+count+"次转换,最终结果为:"+a);
               thefirst_str=a;
//               KMP kmp = new KMP();
//               String value="";
//               String key="";
//               for (int i = 0; i <=a.length(); i++) {
//            	   	if(kmp.kmp_1(a,"value:")!=-1) {
//            	   		i=i+6;
//            	   	}
//            	   	value=value+a.charAt(i);
//            	 	if(kmp.kmp_1(a,"key:")!=-1) {
//            	   		i=i+4;
//            	   	}
//            	 	key=key+a.charAt(i);
//			}
//            	   System.out.println("value是:"+value);
//            	   System.out.println("key是:"+key);

            }
        }finally {
            try{
                if(httpResponse!=null){
                    httpResponse.close();
                }
            }catch(IOException e){
                logger.info("## release resouce error ##" + e);
            }
        }
    }

    /**
     * 生成加密字段
     */
    public static String getDigest(String string) {
        if (string == null) {
            return null;
        }
        char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        byte[] btInput = string.getBytes(StandardCharsets.UTF_8);
        try {
            MessageDigest mdInst = MessageDigest.getInstance("SHA-256");
            mdInst.update(btInput);
            byte[] md = mdInst.digest();
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (byte byte0 : md) {
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (NoSuchAlgorithmException e) {
            return null;
        }
    }

    /**
    *
    * @param result 音频字节流
    * @param file 存储路径
    */
    private static void byte2File(byte[] result, String file) {
        File audioFile = new File(file);
        FileOutputStream fos = null;
        try{
            fos = new FileOutputStream(audioFile);
            fos.write(result);

        }catch (Exception e){
            logger.info(e.toString());
        }finally {
            if(fos != null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

  public static String truncate(String q) {
        if (q == null) {
            return null;
        }
        int len = q.length();
//        String result;
        return len <= 20 ? q : (q.substring(0, 10) + len + q.substring(len - 10, len));
    }
}

2.KMP算法(可用可不用):

package com.sinsy.fanyi.youdaoyun;

public class KMP {
//	测试方法
//	public static void main(String[] args) {
//		String str="ANJCBLANXKLAJCBLSKN";
//		String sub = "CBLANXK";
//		System.out.println("子字符串的位置是从第"+(kmp_1(str,sub)+1)+"位开始的!");
//	}
	public  int kmp_1(String sources_str,String target_str) {
		if (sources_str == null || target_str == null || sources_str.length() == 0 || target_str.length() == 0) {	
			throw new IllegalArgumentException("str或者sub不能为空");
			} 	
		int j = 0;	
		int[] n = next(target_str);	
		for (int i = 0; i < sources_str.length(); i++) {
				while (j > 0 && sources_str.charAt(i) != target_str.charAt(j)) {	
				j = n[j - 1];			} 		
		if (sources_str.charAt(i) == target_str.charAt(j)) {			
		j++;			
	} 		
		if (target_str.length() == j) {	
				int index = i - j + 1;		
			return index;		
		}	
		} 	
		return -1;
	}
	public   int[] next(String target_str) {
//		首先声明一个数组,容量为目标字符串长度
		int[] n = new int[target_str.length()];
		int x = 0;
		for (int i = 1; i < target_str.length(); i++) {
			while (x > 0 && target_str.charAt(x) != target_str.charAt(x)) {
				x = n[x - 1];			
				} 			
			if (target_str.charAt(i) == target_str.charAt(x)) {
				x++;			
				} 			
			n[i] = x;	
			}
		return n;
		
	}
}

3.字符串匹配算法:

package com.sinsy.fanyi.youdaoyun;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class pipei {

	public  List<String> valuesplit(String str) {

		String regex = "value:(.*?)key:";

		List<String> list = new ArrayList<String>();

		List<String> extvounoLists = new ArrayList<String>();

		Pattern pattern = Pattern.compile(regex);

		Matcher m = pattern.matcher(str);

		while (m.find()) {  

            int i = 1;  

            list.add(m.group(i));  

            i++;  

        } 
//		System.out.println(list.toString());
//		for (String str : list) {
//
//			System.out.println(str);
//
//			String[] strs = str.split("-");
//
//			String strss = strs[strs.length-1];
//
//			extvounoLists.add(strs[strs.length-1]);
//
//		}
//
//		
//
//		for (String string : extvounoLists) {
//
//			System.out.println(string);
//
//		}
//System.out.println(extvounoLists.toString());
		return list;
	}

	public  List<String> Keysplit(String str) {

		String regex = "key:(.*?),";

		List<String> list = new ArrayList<String>();

		List<String> extvounoLists = new ArrayList<String>();

		Pattern pattern = Pattern.compile(regex);

		Matcher m = pattern.matcher(str);

		while (m.find()) {  

            int i = 1;  

            list.add(m.group(i));  

            i++;  

        } 
//		System.out.println(list.toString());
//		for (String str : list) {
//
//			System.out.println(str);
//
//			String[] strs = str.split("-");
//
//			String strss = strs[strs.length-1];
//
//			extvounoLists.add(strs[strs.length-1]);
//
//		}
//
//		
//
//		for (String string : extvounoLists) {
//
//			System.out.println(string);
//
//		}
//System.out.println(extvounoLists.toString());
		return list;
	}

//public static void main(String[] args) {
//	String str ="value:Hello,guten tag,How do you do,good afternoon,key:您好,value:FFWR,key:您好楼主,value:Model hello,Hello models,key:模特您好,";
//	String regex = "key:(.*?),";
//
//	List<String> list = new ArrayList<String>();
//
//	List<String> extvounoLists = new ArrayList<String>();
//
//	Pattern pattern = Pattern.compile(regex);
//
//	Matcher m = pattern.matcher(str);
//
//	while (m.find()) {  
//
//        int i = 1;  
//
//        list.add(m.group(i));  
//
//        i++;  
//
//    } 
//	System.out.println(list.toString());
	for (String str : list) {

		System.out.println(str);

		String[] strs = str.split("-");

		String strss = strs[strs.length-1];

		extvounoLists.add(strs[strs.length-1]);

	}

	

	for (String string : extvounoLists) {

		System.out.println(string);

	}
System.out.println(extvounoLists.toString());
//
//
//}

	public String ww(String str) {
		String regex = ",(.*?),";
		List<String> list = new ArrayList<String>();
		List<String> extvounoLists = new ArrayList<String>();
		Pattern pattern = Pattern.compile(regex);
		Matcher m = pattern.matcher(str);
		while (m.find()) {  
            int i = 1;  
            list.add(m.group(i));  
            i++;  
        } 
		return list.toString();
	}
}

剪切板控制代码:

1.剪切板核心实现:

package com.sinsy.fntp;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;

public class ClipboradUtils {
//	获取文本剪切板
	public Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard();
	public String getClipboardText() {
		String ret = "";
		// 获取剪切板中的内容
		Transferable clipTf = sysClip.getContents(null);
		if (clipTf != null) {
			// 检查内容是否是文本类型
			if (clipTf.isDataFlavorSupported(DataFlavor.stringFlavor)) {
				try {
					ret = (String) clipTf
							.getTransferData(DataFlavor.stringFlavor);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		return ret;
	}
	public boolean isChanged() {
		String firsttime = getClipboardText();
		String secondtime=null;
		// 获取剪切板中的内容
		Transferable clipTf = sysClip.getContents(null);
		if (clipTf != null) {
			// 检查内容是否是文本类型
			if (clipTf.isDataFlavorSupported(DataFlavor.stringFlavor)) {
				try {
					secondtime = (String) clipTf
							.getTransferData(DataFlavor.stringFlavor);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		if(firsttime==secondtime) {
			return false;
		}else {
		return true;
		}
	}
	public void setempty() {  
        Transferable tText = new StringSelection("");  //覆盖系统剪切板
        sysClip.setContents(tText, null);  
	}
}


随机数算法:

package com.sinsy.fntp;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Random;
public class Randomui {
	public static void main(String[] args) {
//		返回一个随机数
		System.out.println(suijishu().get(0));
	}
		static ArrayList<Integer> suijishu() {
			ArrayList<Integer> GD=new ArrayList<Integer>();
			 ArrayList<Integer> SCX=new ArrayList<Integer>();
	       for(int a=0;a<11;a++){
	           GD.add(a);
//	           System.out.print(a+"  ");
	       }
//	       System.out.println();
	       for(int b=0;b<4;b++){
	           Random r=new Random();
	             int a=r.nextInt(GD.size());
//	             [0,11)个伪随机数
//	             System.out.print(GD.get(a)+","); 
	             SCX.add(GD.get(a));
	             GD.remove(a);
	       }
//	       System.out.println();
	       return SCX;
		}
}


3.监听剪切板实现代码(保存至本地,可用可不用):

package com.sinsy.fntp;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class savaimage {
//	设置一个路径
//	String path="";
	public static String getpath (){
		 String Image_path=null;
		try {
			//获取粘贴板图片
			Image image = savaimage.getImageFromClipboard();
			Randomui randompath=new Randomui();
			
			File file= new File("D:\\"+randompath.suijishu().get(0)+randompath.suijishu().get(1)+randompath.suijishu().get(2)+randompath.suijishu().get(3)+".jpg");
			//转成jpg
			BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
			//转成png
//			BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
			Graphics2D g = bufferedImage.createGraphics();
			g.drawImage(image, null, null);
			ImageIO.write((RenderedImage)bufferedImage, "jpg", file);
//			ImageIO.write((RenderedImage)bufferedImage, "png", file);
			Image_path=file.getPath();
 
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return Image_path;
	}
	
	
	/**
	 * 从剪切板获得文字。
	 */
	public static String getSysClipboardText() {
		String ret = "";
		Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard();
		// 获取剪切板中的内容
		Transferable clipTf = sysClip.getContents(null);
		
		if (clipTf != null) {
			// 检查内容是否是文本类型
			if (clipTf.isDataFlavorSupported(DataFlavor.stringFlavor)) {
				try {
					ret = (String) clipTf
							.getTransferData(DataFlavor.stringFlavor);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
 
		return ret;
	}
 
	/**
	 * 将字符串复制到剪切板。
	 */
	public static void setSysClipboardText(String writeMe) {
		Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
		Transferable tText = new StringSelection(writeMe);
		clip.setContents(tText, null);
	}
 
	/**
	 * 从剪切板获得图片。
	 */
	public static Image getImageFromClipboard() throws Exception {
		Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard();
		Transferable cc = sysc.getContents(null);
		if (cc == null)
			return null;
		else if (cc.isDataFlavorSupported(DataFlavor.imageFlavor))
			return (Image) cc.getTransferData(DataFlavor.imageFlavor);
		return null;
	}
 
	/**
	 * 复制图片到剪切板。
	 */
	public static void setClipboardImage(final Image image) {
		Transferable trans = new Transferable() {
			public DataFlavor[] getTransferDataFlavors() {
				return new DataFlavor[] { DataFlavor.imageFlavor };
			}
 
			public boolean isDataFlavorSupported(DataFlavor flavor) {
				return DataFlavor.imageFlavor.equals(flavor);
			}
 
			public Object getTransferData(DataFlavor flavor)
					throws UnsupportedFlavorException, IOException {
				if (isDataFlavorSupported(flavor))
					return image;
				throw new UnsupportedFlavorException(flavor);
			}
 
		};
		Toolkit.getDefaultToolkit().getSystemClipboard().setContents(trans,
				null);
	}
}

腾讯云文本识别代码:

1.识别核心代码:

package com.sinsy.fntp.shibie;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.json.JSONObject;

import com.baidu.aip.ocr.AipOcr;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.sinsy.fntp.shibie.*;

public class aiscan {
	  //设置APPID/AK/SK
    public static final String APP_ID = "APPID";
    public static final String API_KEY = "APIKEY";
    public static final String SECRET_KEY = "KEY";
    public static String result = null;
    public  String ceshi() {
        // 初始化一个AipOcr
        AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);

        // 可选:设置网络连接参数
        client.setConnectionTimeoutInMillis(2000);
        client.setSocketTimeoutInMillis(60000);

        // 可选:设置代理服务器地址, http和socket二选一,或者均不设置
//        client.setHttpProxy("proxy_host", proxy_port);  // 设置http代理
//        client.setSocketProxy("proxy_host", proxy_port);  // 设置socket代理

        // 可选:设置log4j日志输出格式,若不设置,则使用默认配置
        // 也可以直接通过jvm启动参数设置此环境变量
//    System.setProperty("aip.log4j.conf", "path/to/your/log4j.properties");

        // 调用接口
//        设置一个连接地址(path)
    	savaimage image_path = new savaimage();
        String path = image_path.getpath();
        JSONObject res = client.basicGeneral(path, new HashMap<String, String>());
//        保存读取结果:
       result = res.toString(2);
        System.out.println(res.toString(2));
        System.out.println(res.toString());
//       清除多余符号后
       System.out.println( split( getwords(res.toString())));
//       清除标记后:
       System.out.println(" 清除标记后:"+valuesplit(split( getwords(res.toString()))));
//       格式清除
       List<String> yu = valuesplit(split( getwords(res.toString())));
      String words="";
      for(int a=0;a<yu.size();a++) {
    	  words+=yu.get(a)+",";
      }
	return words;
      
    }
   public  String getwords(String json) {
//    	第一步:getwods
    	 JsonObject  jsonObj = (JsonObject)new JsonParser().parse(json);
    	 String words_res = jsonObj.get("words_result").toString();
    	 String number_res = jsonObj.get("words_result_num").toString();
    	  String re = words_res.replaceAll("\"", "");
    	  System.out.println(re);
    	  
		return re;
    	
    }
    public String split(String str) {
    	String i="";int count=0;
    	for(int a=0;a<str.length();a++) {
    		if(str.charAt(a)!='{'&&str.charAt(a)!='['&&str.charAt(a)!='"'&&str.charAt(a)!=']'&&str.charAt(a)!='}') {
		  		i=i+str.charAt(a);
	  }  
	  count++;
    	}
    	i+=",";
    	System.out.println("经过"+count+"次转换,最终结果为:"+i);
		return i;
    	
    }
    
	public   List<String> valuesplit(String str) {

		String regex = "words:(.*?),";

		List<String> list = new ArrayList<String>();

		List<String> extvounoLists = new ArrayList<String>();

		Pattern pattern = Pattern.compile(regex);

		Matcher m = pattern.matcher(str);

		while (m.find()) {  

            int i = 1;  

            list.add(m.group(i));  

            i++;  

        } 
		return list;
	}

}

2.随机数生成算法

package com.sinsy.fntp.shibie;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Random;
public class Randomui {
	public static void main(String[] args) {
//		返回一个随机数
		System.out.println(suijishu().get(0));
	}
		static ArrayList<Integer> suijishu() {
			ArrayList<Integer> GD=new ArrayList<Integer>();
			 ArrayList<Integer> SCX=new ArrayList<Integer>();
	       for(int a=0;a<11;a++){
	           GD.add(a);
//	           System.out.print(a+"  ");
	       }
//	       System.out.println();
	       for(int b=0;b<4;b++){
	           Random r=new Random();
	             int a=r.nextInt(GD.size());
//	             [0,11)个伪随机数
//	             System.out.print(GD.get(a)+","); 
	             SCX.add(GD.get(a));
	             GD.remove(a);
	       }
//	       System.out.println();
	       return SCX;
		}
}


3.生成图片保存本地:(与上文一致)

package com.sinsy.fntp.shibie;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

import com.sinsy.fntp.shibie.*;
public class savaimage {
//	设置一个路径
//	String path="";
	public static String getpath (){
		 String Image_path=null;
		try {
			//获取粘贴板图片
			Image image = savaimage.getImageFromClipboard();
			Randomui randompath=new Randomui();
			
			File file= new File("D:\\sinsy\\"+randompath.suijishu().get(0)+randompath.suijishu().get(1)+randompath.suijishu().get(2)+randompath.suijishu().get(3)+".jpg");
			//转成jpg
			BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
			//转成png
//			BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
			Graphics2D g = bufferedImage.createGraphics();
			g.drawImage(image, null, null);
			ImageIO.write((RenderedImage)bufferedImage, "jpg", file);
//			ImageIO.write((RenderedImage)bufferedImage, "png", file);
			Image_path=file.getPath();
 
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return Image_path;
	}
	
	
	/**
	 * 从剪切板获得文字。
	 */
	public static String getSysClipboardText() {
		String ret = "";
		Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard();
		// 获取剪切板中的内容
		Transferable clipTf = sysClip.getContents(null);
		
		if (clipTf != null) {
			// 检查内容是否是文本类型
			if (clipTf.isDataFlavorSupported(DataFlavor.stringFlavor)) {
				try {
					ret = (String) clipTf
							.getTransferData(DataFlavor.stringFlavor);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
 
		return ret;
	}
 
	/**
	 * 将字符串复制到剪切板。
	 */
	public static void setSysClipboardText(String writeMe) {
		Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
		Transferable tText = new StringSelection(writeMe);
		clip.setContents(tText, null);
	}
 
	/**
	 * 从剪切板获得图片。
	 */
	public static Image getImageFromClipboard() throws Exception {
		Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard();
		Transferable cc = sysc.getContents(null);
		if (cc == null)
			return null;
		else if (cc.isDataFlavorSupported(DataFlavor.imageFlavor))
			return (Image) cc.getTransferData(DataFlavor.imageFlavor);
		return null;
	}
 
	/**
	 * 复制图片到剪切板。
	 */
	public static void setClipboardImage(final Image image) {
		Transferable trans = new Transferable() {
			public DataFlavor[] getTransferDataFlavors() {
				return new DataFlavor[] { DataFlavor.imageFlavor };
			}
 
			public boolean isDataFlavorSupported(DataFlavor flavor) {
				return DataFlavor.imageFlavor.equals(flavor);
			}
 
			public Object getTransferData(DataFlavor flavor)
					throws UnsupportedFlavorException, IOException {
				if (isDataFlavorSupported(flavor))
					return image;
				throw new UnsupportedFlavorException(flavor);
			}
 
		};
		Toolkit.getDefaultToolkit().getSystemClipboard().setContents(trans,
				null);
	}
}

代码就放到这里吧,所有的资源包下载,我都放在一个压缩包里面,大家下载压缩包就可以导入eclipse直接运行使用了,注意需要Java-SWT的jar,没有的话,请在csdn搜索一下eclipse安装swt。

最后,如果您喜欢博主的文章,请您关注,点赞,评论三连走一波,感谢各位程序猿与程序媛的支持,小弟会继续努力。
在这里插入图片描述

  • 11
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fntp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值