小程序[邮箱提取器-EmailSplider]总结
1、背景情况
2、涉及知识
3、效果图


4、源代码
- package test;
- import java.awt.EventQueue;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.net.URLConnection;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import javax.swing.JButton;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JOptionPane;
- import javax.swing.JScrollPane;
- import javax.swing.JTextArea;
- import javax.swing.JTextField;
- import javax.swing.SwingUtilities;
- public class EmailSplider extends JFrame {
- private static final long serialVersionUID = -2498717483036732605L;
- private JTextField txtHttpvtiebabaiducomp;
- private JTextArea txtrn;
- /**
- * Launch the application.
- */
- public static void main(String[] args) {
- EventQueue.invokeLater(new Runnable() {
- public void run() {
- try {
- EmailSplider frame = new EmailSplider();
- frame.setVisible(true);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- });
- }
- private String ReadHtml(URL txtUrl){
- StringBuffer sb = new StringBuffer();
- try {
- URLConnection conn =txtUrl.openConnection();
- BufferedReader bf = new BufferedReader( new InputStreamReader( conn.getInputStream(),"utf-8"));
- String str = null;
- while((str = bf.readLine()) != null){
- sb.append(str);
- }
- bf.close();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- return sb.toString();
- }
- /**
- * Create the frame.
- */
- public EmailSplider() {
- setResizable(false);
- setTitle("\u90AE\u7BB1\u63D0\u53D6\u5668");
- setSize(663, 507);
- this.setLocationRelativeTo(null); //居中窗体
- getContentPane().setLayout(null);
- JLabel label = new JLabel("\u8BF7\u8F93\u5165\u7F51\u5740");
- label.setBounds(10, 10, 71, 15);
- getContentPane().add(label);
- txtHttpvtiebabaiducomp = new JTextField();
- txtHttpvtiebabaiducomp.setText("http://v.tieba.baidu.com/p/3349997454");
- txtHttpvtiebabaiducomp.setBounds(82, 7, 493, 21);
- getContentPane().add(txtHttpvtiebabaiducomp);
- txtHttpvtiebabaiducomp.setColumns(10);
- JButton button = new JButton("\u63D0\u53D6");
- button.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- new Thread( () -> {
- try {
- URL txtUrl = new URL(txtHttpvtiebabaiducomp.getText());
- String html = ReadHtml(txtUrl);
- Pattern p =Pattern.compile("[a-zA-Z0-9_-]+@\\w+\\.[a-z]+(\\.[a-z]+)?");
- Matcher m = p.matcher(html);
- while(m.find()){
- //System.out.println(m.group());
- try {
- SwingUtilities.invokeAndWait(()->{
- txtrn.append(System.getProperty("line.separator")+m.group());
- txtrn.setCaretPosition(txtrn.getText().length());
- });
- } catch (Exception e1) {
- e1.printStackTrace();
- }
- }
- } catch (MalformedURLException e1) {
- JOptionPane.showMessageDialog(null, "请输入合法的网址!\n 必须以http:// 开头", "操作提示", JOptionPane.ERROR_MESSAGE);
- return;
- }
- }).start();
- }
- });
- button.setBounds(585, 6, 62, 23);
- getContentPane().add(button);
- txtrn = new JTextArea();
- txtrn.setText("\u8FD9\u91CC\u663E\u793A\u63D0\u53D6\u7684\u90AE\u7BB1");
- txtrn.setLineWrap(true);
- JScrollPane jScrollPane = new JScrollPane(txtrn);
- jScrollPane.setBounds(10, 35, 637, 432);
- getContentPane().add(jScrollPane );
- jScrollPane.setVerticalScrollBarPolicy(
- JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
- }
- }
5、jar包附件
- SwingUtilities.invokeLater( new Runnable() {
- @Override
- public void run() {
- txtrn.append(m.group()+System.getProperty("line.separator"));
- txtrn.setCaretPosition(txtrn.getText().length());
- }
- }
- });
- SwingUtilities.invokeAndWait(()->{
- txtrn.append(System.getProperty("line.separator")+m.group());
- txtrn.setCaretPosition(txtrn.getText().length());
- });
- SwingUtilities.invokeAndWait(()->{
Q3:怎么给JTextArea添加垂直滚动条?
- txtrn = new JTextArea();
- txtrn.setText("这里是内容");
- txtrn.setLineWrap(true); //设置自动换行,让横向滚动条不显示
- //用txtrn对象作为JScrollPane的构造方法的参数
- JScrollPane jScrollPane = new JScrollPane(txtrn);
- //下面setBounds很重要
- jScrollPane.setBounds(10, 35, 637, 432);
- //只需要把jScrollPane 添加到窗体,如果再添加txtrn对象就会乱。
- getContentPane().add(jScrollPane );
Q4:提取邮箱的正则表达式怎么写?
小程序[邮箱提取器-EmailSplider]总结的更多相关文章
- 微信小程序自运营器 微信小程序自动运营器(让你的微信小程序,公众号零运营成本,24小时全自动运营)
自动发单,自动评价,自动评论,自动推广 微信小程序自运营器 微信小程序自动运营器(让你的微信小程序,公众号零运营成本,24小时全自动运营) 我们会根据你的微信公众号或微信小程序定制开发带有一定AI智 ...
- 微信小程序api拦截器
微信小程序api拦截器 完美兼容原生小程序项目 完美兼用小程序api的原本调用方式,无痛迁移 小程序api全Promise化 和axios一样的请求方式 小程序api自定义拦截调用参数和返回结果 强大 ...
- 微信小程序——音频播放器
先来个效果图韵下味: 需求: 音频的播放,暂停,中间按钮状态的变化,播放时实时更新播放进度: 前进15s,后退15s: 进度条拖动. 一开始想着这3个功能应该挺简单的.不就是播放,暂停,前进,后退么~ ...
- 微信小程序音乐播放器
写在前面 1.入门几天小白的作品,希望为您有帮助,有好的意见或简易烦请赐教 2.微信小程序审核音乐类别已经下架,想要发布选题需慎重.附一个参考链接,感谢https://www.hishop.com.c ...
- 小程序拾色器(颜色选择器)组件mini-color-picker
特性: 现有方案分析 we-color-picker 需注意组件定位,操作不跟手不流畅,配置复杂.其定位会撑开原有页面,体验不佳.滑动距离按像素区分(固定),需考虑设备分辨率,不利于多端. Papae ...
- 【小程序案例】支付宝小程序-MQTT模器,IoT设备通过WSS接入阿里云IoT物联网平台
支付宝小程序-MQTT模拟器通过WSS接入阿里云IoT物联网平台 小程序效果: 1. 准备工作 1.1 注册阿里云账号 开通阿里云账号,并通过支付宝实名认证 https://www.aliyun.co ...
- UWP_开源小程序 水印添加器
前几天写了一个确定水印位置的小博客.决定要写一个添加水印的UWP程序. 目前程序技术方面已经差不多了.所以提上日程
- 微信小程序音乐播放器组件
wxml <image bindtap="click" src="{{isPlay?'/images/':'/images/'}}"/> JS Pa ...
- 微信小程序踩坑集合
1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...
随机推荐
- iOSPOI检索详细总结
iOS百度地图路径规划和POI检索详细总结 路径规划.png 百度地图的使用 百度地图API的导入网上说了许多坑,不过我遇到的比较少,这里就放两个比较常见的吧.坑一: 奥联WIFI_xcodeproj ...
- Darwin做直播时对ReflectorSession引用数的控制
在之前的博客中,我们提到了如何用Darwin&live555实现直播过程,那么更进一步,当直播结束时,我们需要关闭所有正在收看的客户端,并且delete转发会话ReflectorSession ...
- MongoDB在win7上的安装(精简版)
1.下载mongdb的zip文件,解压后会发现有bin文件夹,在同层目录下建一个data目录, 2.在data目录下建一个log和db文件夹, 3.在log文件下建一个MongoDB.log 文件 4 ...
- UITableViewCell的多选操作
版权声明:本文为博主原创文章.未经博主同意不得转载,转载需加上原博客链接. https://blog.csdn.net/panyong4627/article/details/37902207 - ( ...
- 开启unity3D的学习之路
2014年5月11号.我開始了我的Unity3D的学习之路.我将在此记录我学习过程中各个进程,这样在将来的某天,自己忘记了某部分内容时.也能够回过头来复习一下.
- Extjs — Grid数据导出成Excel
最近因为项目问题,需要解决Extjs导出成Excel的问题. 下面简单描述这个问题解决的步骤如下: 1.先在js文件里写了一个button的handler事件,通过点击按钮,来实现调用ExportEx ...
- 使用 Spring 容器管理 Filter
当我们用Filter时,往往需要使用一些辅助的service,在普通的java中,只要声明(set,get方法)后在spring-application配置文件中配置就可以了,但是由于Filter与L ...
- mysql优化之 EXPLAIN(一)
数据库优化最常用的命令就是用explain查看一下写的sql是否用到了索引: 如: (root@localhost) [akapp]>explain select * from sc_activ ...
- vue 动态传值笔记
:prop="'answers.a' + item.split('.')[1]+'.total'" {{scope.row.answers['a'+item.split('.')[ ...
- ansible mysql模块的使用今年
摘自: https://www.ibm.com/developerworks/cn/linux/1502_lih_ansible/