Client端:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class ChatClient {
private static final String SERVER_IP = "127.0.0.1";
private static final int SERVER_PORT = 8888;
Socket socket = null;
DataOutputStream dos = null;
DataInputStream dis = null;
private boolean bConnected = false;
private static Scanner in = new Scanner(System.in);
private static String hostInfo = null;
Thread tRecv = new Thread(new RecvThread());
public static void main(String[] args) {
new ChatClient().launch();
}
public void launch() {
connect();
tRecv.start();
}
public void connect() {
try {
socket = new Socket(SERVER_IP, SERVER_PORT);
dos = new DataOutputStream(socket.getOutputStream());
dis = new DataInputStream(socket.getInputStream());
bConnected = true;
InetAddress addr = InetAddress.getLocalHost();
String ip = addr.getHostAddress().toString();// 获得本机IP
String address = addr.getHostName().toString();// 获得本机名称
hostInfo = ip + "\t" + address + "\tconnected.";
System.out.println(hostInfo);
dos.writeUTF(hostInfo);
dos.flush();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void disconnect() throws IOException {
try {
dos.close();
dis.close();
socket.close();
} catch (IOException e) {
}
}
private class RecvThread implements Runnable {
public void run() {
while (bConnected) {
try {
if (in.hasNext()) {
String talk = in.nextLine();
if (talk.equals("quit")) {
disconnect();
bConnected = false;
break;
}
dos.writeUTF(talk);
dos.flush();
}
String talk = dis.readUTF();
System.out.println(talk);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
server端:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class ChatServer {
boolean started = false;
ServerSocket ss = null;
List<Client> clients = new ArrayList<Client>();
public static void main(String[] args) {
new ChatServer().start();
}
public void start() {
try {
ss = new ServerSocket(8888);
started = true;
} catch (BindException e) {
System.err.println("port in use.please stop program using this port and restart.");
System.exit(0);
} catch (IOException e) {
e.printStackTrace();
}
try {
while(started) {
Socket s = ss.accept();
Client c = new Client(s);
// System.out.println("a client connected.");
new Thread(c).start();
clients.add(c);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Client implements Runnable {
private Socket s;
private DataInputStream dis = null;
private DataOutputStream dos = null;
private boolean bConnected = false;
public Client(Socket s) {
this.s = s;
try {
dis = new DataInputStream(s.getInputStream());
dos = new DataOutputStream(s.getOutputStream());
bConnected = true;
} catch (IOException e) {
e.printStackTrace();
}
}
public void send(String str) {
try {
dos.writeUTF(str);
dos.flush();
} catch (IOException e) {
clients.remove(this);
System.out.println("a client quit.");
//e.printStackTrace();
}
}
public void run() {
try {
while(bConnected) {
String str = dis.readUTF();
solveTalk(str);
}
} catch (EOFException e) {
System.out.println("Client closed!");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(dis != null) dis.close();
if(dos != null) dos.close();
if(s != null) {
s.close();
s = null;
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
private void solveTalk(String talk) {
System.out.println(talk);
for(int i=0;i<clients.size();i++) {
Client c = clients.get(i);
c.send(talk);
}
}
}
}
posted @
2015-08-18 10:03 marchalex 阅读(358) |
评论 (0) |
编辑 收藏
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexTestHarnessV4 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(
new InputStreamReader(new BufferedInputStream(System.in))
);
while (true) {
System.out.print("\nEnter your regex: ");
Pattern pattern = Pattern.compile(br.readLine());
System.out.print("Enter input string to search: ");
Matcher matcher = pattern.matcher(br.readLine());
boolean found = false;
while (matcher.find()) {
System.out.println("I found the text \"" + matcher.group() +
"\" starting at index " + matcher.start() +
" and ending at index " + matcher.end() +
".");
found = true;
}
if (!found) {
System.out.println("No match found.");
}
}
}
}
样例:
Enter your regex: [0-9]+
Enter input string to search: fdsdffd9090fd
I found the text "9090" starting at index 7 and ending at index 11.
Enter your regex: class="fav-num[^"]*"[^>]*>[^<]*
Enter input string to search: <i class="litb-icon-fav-on"></i><i class="litb-icon-fav-off"></i><span class="fav-num">(151)</span>
I found the text "class="fav-num">(151)" starting at index 71 and ending at index 92.
资料:
http://blog.csdn.net/yaerfeng/article/details/28855587
posted @
2015-08-12 13:58 marchalex 阅读(309) |
评论 (0) |
编辑 收藏
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class GoogleFinderNew {
private static String address = "https://www.google.com.hk/search?hl=en&q=";
private static String query = "";
private static String charset = "UTF-8";
private static List<String> useragentList = new ArrayList<String>();
private static void initUserAgentList(String filename) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(filename));
String line = null;
while((line = reader.readLine()) != null){
useragentList.add(line.trim());
}
reader.close();
return;
}
private static List<String> getpages(URL url) throws IOException {
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
String line;
String ans = "";
while ((line = reader.readLine()) != null){
ans += line + "\n";
}
int st = -1, ed = 0;
List<String> pagesList = new ArrayList<String>();
while((st = ans.indexOf("<h3 class=\"r\"><a href=\"", ed)) != -1) {
ed = ans.indexOf("\"", st+23);
//System.out.println(ans.substring(st+23, ed));
pagesList.add(ans.substring(st+23, ed));
}
return pagesList;
}
public static void main(String[] args) throws MalformedURLException, IOException, InterruptedException {
Scanner in = new Scanner(System.in);
String askurl = in.nextLine();
query = in.nextLine();
initUserAgentList("D:\\useragent.txt");
//System.setProperty("http.agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.3.154.9 Safari/525.19");
int pages = 10;
for(int i=0;i<pages;i++) {
System.out.println((i+1) + " ..");
int index = (int)(useragentList.size()*Math.random());
if(index == useragentList.size()) index --;
String theUserAgent = useragentList.get(index);
System.setProperty("http.agent", theUserAgent);
String urlString = address + URLEncoder.encode(query, charset);
if(i != 0) urlString += "&start=" + i + "0";
//System.out.println(urlString);
List<String> list = getpages(new URL(urlString));
for(String page : list) {
if(page.contains(askurl)) {
// if(page.equals(askurl)) {
System.out.println(askurl + " found in the " + (i+1) + " th page.");
System.out.println(page);
return;
}
}
int extraTime = 0; //(int)(3000 * Math.random());
Thread.sleep(1000 + extraTime);
}
System.out.println("can't find " + askurl + " in the first " + pages + " pages.");
}
}
posted @
2015-07-29 16:41 marchalex 阅读(262) |
评论 (0) |
编辑 收藏
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.List;
import java.util.Scanner;
import java.util.StringTokenizer;
import com.google.gson.Gson;
public class GoogleFinder {
public static void main(String[] args) throws IOException, InterruptedException {
String address = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";
String query = "";
String charset = "UTF-8";
Scanner in = new Scanner(System.in);
String targeturl = in.nextLine();
query = in.nextLine();
for(int i=0;i<125;i++) {
URL url = new URL(address + URLEncoder.encode(query, charset) + "&start=" + i);
//System.out.println(url);
Reader reader = new InputStreamReader(url.openStream(), charset);
GoogleResults results = new Gson().fromJson(reader, GoogleResults.class);
for(int t=0;t<30;t++) {
System.out.print(".");
Thread.sleep(2000);
} System.out.println("");
for(int j=0;j<4;j++) {
String ss = results.getResponseData().getResults().get(j).getUrl().toLowerCase();
if(ss.contains(targeturl)) {
System.out.println(ss);
System.out.println(results.getResponseData().getResults().get(j).getTitle());
System.out.println("Found in the " + (i*4+j+1) + " th");
return;
}
}
System.out.println("" + ((i+1)*4) + " pages found.");
}
System.out.println("Can find " + targeturl + " in the first 500 pages");
}
}
class GoogleResults {
private ResponseData responseData;
public ResponseData getResponseData() {
return responseData;
}
public void setResponseData(ResponseData responseData) {
this.responseData = responseData;
}
public String toString() {
return "ResponseData[" + responseData + "]";
}
static class ResponseData {
private List<Result> results;
public List<Result> getResults() {
return results;
}
public void setResults(List<Result> results) {
this.results = results;
}
public String toString() {
return "Results[" + results + "]";
}
}
static class Result {
private String url;
private String title;
public String getUrl() {
return url;
}
public String getTitle() {
return title;
}
public void setUrl(String url) {
this.url = url;
}
public void setTitle(String title) {
this.title = title;
}
public String toString() {
return "Result[url:" + url + ",title:" + title + "]";
}
}
}
posted @
2015-07-29 14:16 marchalex 阅读(280) |
评论 (0) |
编辑 收藏
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class GoogleFinderNew {
private static String address = "https://www.google.com.hk/search?hl=en&q=";
private static String query = "";
private static String charset = "UTF-8";
private static void test() {
String ans = "abc<h3>helloworld</h3>hehe<h3>nicetomeetyou</h3>";
int st = ans.indexOf("<h3>");
int ed = ans.indexOf("</h3>");
System.out.println(st + " " + ed);
System.out.println(ans.substring(st+4, ed));
}
private static List<String> getpages(URL url) throws IOException {
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
String line;
String ans = "";
while ((line = reader.readLine()) != null){
ans += line + "\n";
}
int st = -1, ed = 0;
List<String> pagesList = new ArrayList<String>();
while((st = ans.indexOf("<h3 class=\"r\"><a href=\"", ed)) != -1) {
ed = ans.indexOf("\"", st+23);
//System.out.println(ans.substring(st+23, ed));
pagesList.add(ans.substring(st+23, ed));
}
return pagesList;
}
public static void main(String[] args) throws MalformedURLException, IOException, InterruptedException {
Scanner in = new Scanner(System.in);
String askurl = in.nextLine();
query = in.nextLine();
System.setProperty("http.agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11");
int pages = 100;
for(int i=0;i<pages;i++) {
System.out.println((i+1) + " ..");
String urlString = address + URLEncoder.encode(query, charset);
if(i != 0) urlString += "&start=" + i + "0";
//System.out.println(urlString);
List<String> list = getpages(new URL(urlString));
for(String page : list) {
if(page.contains(askurl)) {
// if(page.equals(askurl)) {
System.out.println(askurl + " found in the " + (i+1) + " th page.");
System.out.println(page);
return;
}
}
Thread.sleep(1000);
}
System.out.println("can't find " + askurl + " in the first " + pages + " pages.");
}
}
posted @
2015-07-29 14:16 marchalex 阅读(301) |
评论 (0) |
编辑 收藏
图片放在D:/pic/的p1.png,p2.png,p3.png,台词在D盘的lines.txt
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.StringTokenizer;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GameFrame extends JFrame {
private static final int Width = 1000;
private static final int Height = 600;
private static JFrame frame = null;
private static String content = null;
public GameFrame() throws Exception {
frame = new JFrame("");
frame.setLocationRelativeTo(null);
frame.setSize(Width, Height);
frame.setLocation(100, 30);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
BufferedReader reader = new BufferedReader(new FileReader("D:\\lines.txt"));
while((content=reader.readLine())!=null) {
JPanel panel = new GamePanel();
panel.setBounds(0, 0, Width, Height);
frame.getContentPane().add(panel);
frame.setVisible(true);
Thread.sleep(1000);
}
}
class GamePanel extends JPanel {
public void paint(Graphics g) {
super.paint(g);
ImageIcon icon = new ImageIcon("D:\\pic\\bg.jpg");
g.drawImage(icon.getImage(), 0, 0, Width, Height, this);
g.setFont(new Font("", Font.PLAIN, 50));
StringTokenizer st = new StringTokenizer(content);
String name = st.nextToken();
if(name.equals("end")) {
g.setColor(Color.WHITE);
g.drawString("end", 470, 300);;
} else {
if(name.equals("p1")) {
icon = new ImageIcon("D:\\pic\\p1.png");
g.drawImage(icon.getImage(), 100, 50, 200, 300, this);
String words = st.nextToken();
g.setColor(Color.CYAN);
g.drawString(words, 100, 450);
} else if(name.equals("p2")) {
icon = new ImageIcon("D:\\pic\\p2.png");
g.drawImage(icon.getImage(), 700, 50, 200, 300, this);
String words = st.nextToken();
g.setColor(Color.PINK);
g.drawString(words, 500, 450);
} else if(name.equals("p3")) {
icon = new ImageIcon("D:\\pic\\p3.png");
g.drawImage(icon.getImage(), 450, 50, 200, 300, this);
String words = st.nextToken();
g.setColor(Color.GREEN);
g.drawString(words, 450, 450);
}
}
}
}
public static void main(String[] args) throws Exception {
new GameFrame();
}
}
posted @
2015-06-08 15:59 marchalex 阅读(290) |
评论 (0) |
编辑 收藏
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class FrameWork extends JFrame {
private static final double pi = Math.acos(-1.0);
private static final int Width = 1100;
private static final int Height = 650;
private static JFrame frame = null;
private static int the_time = -1095;
public FrameWork() {
frame = new JFrame("Frame");
frame.setLocationRelativeTo(null);
frame.setSize(Width, Height);
frame.setLocation(100, 30);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
for(int i=0;i<1000;i++) {
JPanel panel = new ImagePanel();
panel.setBounds(0, 0, Width, Height);
frame.getContentPane().add(panel);
frame.setVisible(true);
the_time +=5;
}
}
class ImagePanel extends JPanel {
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.WHITE);
g.fillRect(0, 0, Width, Height);
if(the_time < 0) {
g.setColor(Color.BLACK);
g.setFont(new Font("MS UI Gothic", Font.PLAIN, 50));
g.drawString(""+(-the_time/100), 50, 50);
}
int[] x = {500, 550, 150, 300, 800, 850, 950, 100};
int[] y = {500, 250, 200, 100, 190, 300, 450, 420};
g.setColor(Color.GRAY);
for(int i=0;i<8;i++)
for(int j=i+1;j<8;j++) {
g.drawLine(x[i], y[i], x[j], y[j]);
}
int[][] d = new int[8][8];
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
d[i][j] = (int)Math.sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
int[] start = new int[8];
start[0] = 0;
for(int i=1;i<=4;i++) start[i] = start[i-1] + d[i-1][i];
int d_long = 0;
for(int i=1;i<8;i++) if(d[0][i] > d_long) d_long = d[0][i];
int end_time = start[4] + d[0][4] + d_long;
if(the_time <= 0) g.setColor(Color.YELLOW);
else if(the_time > end_time-d_long) g.setColor(Color.RED);
else g.setColor(Color.ORANGE);
g.fillRect(x[0]-15, y[0]-30, 30, 30);
g.setColor(Color.BLACK);
g.drawRect(x[0]-15, y[0]-30, 30, 30);
if(the_time <= 0) g.setColor(Color.YELLOW);
else if(the_time > end_time-d_long) g.setColor(Color.RED);
else g.setColor(Color.ORANGE);
g.fillOval(x[0]-30, y[0]-20, 60, 40);
g.setColor(Color.BLACK);
g.drawOval(x[0]-30, y[0]-20, 60, 40);
for(int i=1;i<=4;i++) {
if(the_time <= start[i]) g.setColor(Color.BLUE);
else g.setColor(Color.darkGray);
g.fillRect(x[i]-15, y[i]-15, 30, 30);
g.setColor(Color.BLACK);
g.drawRect(x[i]-15, y[i]-15, 30, 30);
}
for(int i=5;i<8;i++) {
g.setColor(Color.GREEN);
g.fillOval(x[i]-15, y[i]-15, 30, 30);
g.setColor(Color.BLACK);
g.drawOval(x[i]-15, y[i]-15, 30, 30);
}
for(int i=0;i<5;i++) {
if(the_time > start[i]) {
int left_time = the_time - start[i];
for(int j=0;j<8;j++) {
if(i == j) continue;
if(d[i][j] > left_time) {
int xx = x[i] + (int)((double)(x[j]-x[i])*left_time/(double)d[i][j]);
int yy = y[i] + (int)((double)(y[j]-y[i])*left_time/(double)d[i][j]);
g.setColor(Color.CYAN);
g.fillOval(xx-5, yy-5, 10, 10);
}
}
}
}
if(the_time>end_time-d_long) {
for(int i=1;i<8;i++) {
int left_time = the_time - end_time + d_long;
if(left_time > d[0][i]) {
if(i>4) {
g.setColor(Color.RED);
g.fillOval(x[i]-15, y[i]-15, 30, 30);
g.setColor(Color.BLACK);
g.drawOval(x[i]-15, y[i]-15, 30, 30);
} else {
g.setColor(Color.RED);
g.fillRect(x[i]-15, y[i]-15, 30, 30);
g.setColor(Color.BLACK);
g.drawRect(x[i]-15, y[i]-15, 30, 30);
}
} else {
int xx = x[0] + (int)((double)(x[i]-x[0])*left_time/(double)d[0][i]);
int yy = y[0] + (int)((double)(y[i]-y[0])*left_time/(double)d[0][i]);
g.setColor(Color.RED);
g.fillOval(xx-5, yy-5, 10, 10);
}
}
}
g.setColor(Color.WHITE);
g.setFont(new Font("MS UI Gothic", Font.PLAIN, 30));
for(int i=1;i<=4;i++) {
g.drawString(""+i, x[i]-7, y[i]+7);
}
}
}
public static void main(String[] args) {
new FrameWork();
}
}
posted @
2015-06-08 01:55 marchalex 阅读(234) |
评论 (0) |
编辑 收藏
运行此程序需要添加一个jar包
下载地址
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.StringTokenizer;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
public class FileToExcel {
public static void main(String[] args) throws Exception {
writeToExcel("D:\\output.txt", "D:\\output.xls");
System.out.println("finished!");
}
public static void writeToExcel(String inFile, String outExcel) throws Exception {
//打开文件
WritableWorkbook book= Workbook.createWorkbook(new File(outExcel));
//生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet=book.createSheet("第一页",0);
//在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
//以及单元格内容为test
//Label label=new Label(0,0,"测试");
//将定义好的单元格添加到工作表中
//sheet.addCell(label);
//jxl.write.Number number = new jxl.write.Number(1,0,789.123);
//sheet.addCell(number);
//jxl.write.Label s=new jxl.write.Label(1, 2, "三十三");
//sheet.addCell(s);
//写入数据并关闭文件
Label label = null;
String s1 = readFile(inFile);
StringTokenizer st1 = new StringTokenizer(s1, "\n");
for(int i=0;st1.hasMoreElements();i++) {
String s2 = st1.nextToken();
StringTokenizer st2 = new StringTokenizer(s2, " \t");
for(int j=0;st2.hasMoreElements();j++) {
String s = st2.nextToken();
label=new Label(j,i, "" + s);
sheet.addCell(label);
}
}
book.write();
book.close(); //最好在finally中关闭,此处仅作为示例不太规范
}
private static String readFile(String filename) throws Exception {
BufferedReader reader = new BufferedReader(new FileReader(filename));
String ans = "", line = null;
while ((line = reader.readLine()) != null) {
ans += line + "\r\n";
}
reader.close();
return ans;
}
}
posted @
2015-04-15 22:11 marchalex 阅读(405) |
评论 (0) |
编辑 收藏
运行此程序需要添加一个jar包
下载地址
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.StringTokenizer;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class ExcelToFile {
public static void main(String[] args) throws Exception {
solve("D:\\input.xls", "D:\\output.txt");
System.out.println("finished!");
}
private static String readFile(String filename) throws Exception {
BufferedReader reader = new BufferedReader(new FileReader(filename));
String ans = "", line = null;
while ((line = reader.readLine()) != null) {
ans += line + "\r\n";
}
reader.close();
return ans;
}
private static void writeFile(String content, String filename)
throws Exception {
BufferedWriter writer = new BufferedWriter(new FileWriter(filename));
writer.write(content);
writer.flush();
writer.close();
}
private static void solve(String xls_name, String outfile) throws Exception {
String ans = "";
File file = new File(xls_name);
String[][] result = getData(file, 2);
int rowLength = result.length;
for(int i=0;i<rowLength;i++) {
for(int j=0;j<result[i].length;j++) {
ans += result[i][j]+" ";
}
ans += "\r\n";
}
writeFile(ans, outfile);
}
/**
* 读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行
* @param file 读取数据的源Excel
* @param ignoreRows 读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1
* @return 读出的Excel中数据的内容
* @throws FileNotFoundException
* @throws IOException
*/
public static String[][] getData(File file, int ignoreRows)
throws FileNotFoundException, IOException {
List<String[]> result = new ArrayList<String[]>();
int rowSize = 0;
BufferedInputStream in = new BufferedInputStream(new FileInputStream(
file));
// 打开HSSFWorkbook
POIFSFileSystem fs = new POIFSFileSystem(in);
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFCell cell = null;
for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {
HSSFSheet st = wb.getSheetAt(sheetIndex);
// 第一行为标题,不取
for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {
HSSFRow row = st.getRow(rowIndex);
if (row == null) {
continue;
}
int tempRowSize = row.getLastCellNum() + 1;
if (tempRowSize > rowSize) {
rowSize = tempRowSize;
}
String[] values = new String[rowSize];
Arrays.fill(values, "");
boolean hasValue = false;
for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) {
String value = "";
cell = row.getCell(columnIndex);
if (cell != null) {
// 注意:一定要设成这个,否则可能会出现乱码
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
value = String.format("%.2f", cell.getNumericCellValue());
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
if (date != null) {
value = new SimpleDateFormat("yyyy-MM-dd")
.format(date);
} else {
value = "";
}
} else {
value = new DecimalFormat("0").format(cell
.getNumericCellValue());
}
break;
case HSSFCell.CELL_TYPE_FORMULA:
// 导入时如果为公式生成的数据则无值
if (!cell.getStringCellValue().equals("")) {
value = cell.getStringCellValue();
} else {
value = cell.getNumericCellValue() + "";
}
break;
case HSSFCell.CELL_TYPE_BLANK:
break;
case HSSFCell.CELL_TYPE_ERROR:
value = "";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
value = (cell.getBooleanCellValue() == true ? "Y"
: "N");
break;
default:
value = "";
}
}
if (columnIndex == 0 && value.trim().equals("")) {
break;
}
values[columnIndex] = value.trim();
hasValue = true;
}
if (hasValue) {
result.add(values);
}
}
}
in.close();
String[][] returnArray = new String[result.size()][rowSize];
for (int i = 0; i < returnArray.length; i++) {
returnArray[i] = (String[]) result.get(i);
}
return returnArray;
}
}
posted @
2015-04-15 21:57 marchalex 阅读(210) |
评论 (0) |
编辑 收藏
RandomRectangles类中的X、Y和n分别代表生成举行的横坐标范围、纵坐标范围和个数。
FrameWork类用于演示。
RandomRectangle.java
public class RandomRectangles {
private static final int maxn = 1010;
private static double[] x = new double[maxn];
private static double[] y = new double[maxn];
private static double[] w = new double[maxn];
private static double[] h =new double[maxn];
private static double[] xmax = new double[maxn];
private static double[] ymax = new double[maxn];
private static double[] xx = new double[maxn];
private static double[] yy = new double[maxn];
private static double X = 1000;
private static double Y = 600;
private static int n = 2;
private static double[][] ans = new double[n][4];
private static int cmp(int i, int j) {
if(y[i] < y[j] || y[i] == y[j] && x[i] < x[j]) return -1;
return 1;
}
private static void sort(int l, int r) {
if(l == r) return;
int mid = (l + r) >> 1;
sort(l, mid);
sort(mid+1, r);
int i = l, j = mid + 1, k = l;
while(i <= mid || j <= r) {
if(i > mid) {
xx[k] = x[j];
yy[k++] = y[j++];
}
else if(j > r) {
xx[k] = x[i];
yy[k++] = y[i++];
}
else if(cmp(i,j) == -1) {
xx[k] = x[i];
yy[k++] = y[i++];
}
else {
xx[k] = x[j];
yy[k++] = y[j++];
}
}
for(i=l;i<=r;i++) {
x[i] = xx[i];
y[i] = yy[i];
}
return;
}
private static boolean create_points() {
for(int i=0;i<n;i++) {
xmax[i] = X;
ymax[i] = Y;
x[i] = Math.random() * X;
y[i] = Math.random() * Y;
}
sort(0, n-1);
for(int i=0;i<n-1;i++) {
if(y[i] == y[i+1] && x[i] == x[i+1]) return false;
}
return true;
}
public static double[][] getData() {
while(true) {
if(create_points() == true) break;
}
for(int i=0;i<n-1;i++) {
if(y[i] == y[i+1]) xmax[i] = x[i];
}
for(int i=0;i<n;i++) {
w[i] = Math.random() * (xmax[i] - x[i]);
for(int j=i+1;j<n;j++) {
if(x[j] >= x[i] && x[j] <= x[i]+w[i]) {
ymax[i] = y[j];
break;
}
}
h[i] = Math.random() * (ymax[i] - y[i]);
for(int j=i+1;j<n;j++) {
if(x[j] < x[i] && y[j] >= y[i] && y[j] <= y[i]+h[i]) {
xmax[j] = xmax[j] < x[j] ? xmax[j] : x[j];
}
}
}
for(int i=0;i<n;i++) {
ans[i][0] = x[i];
ans[i][1] = y[i];
ans[i][2] = w[i];
ans[i][3] = h[i];
}
return ans;
}
public static void main(String[] args) {
ans = getData();
System.out.println(ans[2][2]);
}
}
FrameWork.java
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
public class FrameWork extends JFrame {
private static final double pi = Math.acos(-1.0);
private static final int Width = 1200;
private static final int Height = 800;
private static JFrame frame = null;
public FrameWork() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setSize(Width, Height);
setResizable(false);
getContentPane().setLayout(null);
JPanel panel = new ImagePanel();
panel.setBounds(0, 0, Width, Height);
getContentPane().add(panel);
setVisible(true);
}
class ImagePanel extends JPanel {
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.white);
g.fillRect(0, 0, Width, Height);
g.setColor(Color.black);
double[][] ans = RandomRectangles.getData();
for(int i=0;i<ans.length;i++) {
double x0 = ans[i][0];
double y0 = ans[i][1];
double x1 = x0 + ans[i][2];
double y1 = y0 + ans[i][3];
System.out.println(x0 + " " + y0 + " " + x1 + " " + y1);
}
for(int i=0;i<ans.length;i++)
g.drawRect((int)ans[i][0], (int)ans[i][1], (int)ans[i][2], (int)ans[i][3]);
}
}
public static void main(String[] args) {
new FrameWork();
}
}
posted @
2015-04-15 20:27 marchalex 阅读(351) |
评论 (0) |
编辑 收藏
线段树是一种二叉树结构,能够在O(logn)时间复杂度之内实现对数组中某一区间的增删改查的操作。
关于线段树的
详细解释。
今天我们涉及的是线段树的单点更新以及区间查询功能。
我们以HDU上面的
敌兵布阵为例。
题目描述:
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。
中央情报局要研究敌人究竟演习什么战术,所以Tidy要随时向Derek汇报某一段连续的工兵营地一共有多少人,例如Derek问:“Tidy,马上汇报第3个营地到第10个营地共有多少人!”Tidy就要马上开始计算这一段的总人数并汇报。但敌兵营地的人数经常变动,而Derek每次询问的段都不一样,所以Tidy不得不每次都一个一个营地的去数,很快就精疲力尽了,Derek对Tidy的计算速度越来越不满:"你个死肥仔,算得这么慢,我炒你鱿鱼!”Tidy想:“你自己来算算看,这可真是一项累人的工作!我恨不得你炒我鱿鱼呢!”无奈之下,Tidy只好打电话向计算机专家Windbreaker求救,Windbreaker说:“死肥仔,叫你平时做多点acm题和看多点算法书,现在尝到苦果了吧!”Tidy说:"我知错了。。。"但Windbreaker已经挂掉电话了。Tidy很苦恼,这么算他真的会崩溃的,聪明的读者,你能写个程序帮他完成这项工作吗?不过如果你的程序效率不够高的话,Tidy还是会受到Derek的责骂的.
Java代码:
import java.io.*;
public class Main {
private static final int maxn = 50050;
private static long[] sum = new long[maxn<<2];
private static long[] a = new long[maxn];
private static void pushup(int rt) {
sum[rt] = sum[rt<<1] + sum[rt<<1|1];
}
private static void build(int l, int r, int rt) {
if(l == r) {
sum[rt] = a[l];
return;
}
int mid = (l + r) >> 1;
build(l, mid, rt<<1);
build(mid+1, r, rt<<1|1);
pushup(rt);
}
private static void add(int pos, long value, int l, int r, int rt) {
if(l == r) {
sum[rt] += value;
return;
}
int mid = (l+r) >> 1;
if(pos <= mid) add(pos, value, l, mid , rt<<1);
else add(pos, value, mid+1, r, rt<<1|1);
pushup(rt);
}
private static long query(int L, int R, int l, int r, int rt) {
if(L <= l && r <= R) return sum[rt];
int mid = (l + r) >> 1;
long ans = 0;
if(L <= mid) ans += query(L, R, l, mid, rt<<1);
if(R > mid) ans += query(L, R, mid+1, r, rt<<1|1);
return ans;
}
public static void main(String[] args) throws IOException {
int T, n, cas = 1;
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
in.nextToken();
T = (int)in.nval;
while(T > 0) {
T --;
out.println("Case " + cas + ":");
cas ++;
in.nextToken();
n = (int)in.nval;
for(int i=1;i<=n;i++) {
in.nextToken();
a[i] = (long)in.nval;
}
build(1, n, 1);
while(true) {
in.nextToken();
String order = (String)in.sval;
if(order.equals("End")) break;
else if(order.equals("Query")) {
in.nextToken();
int L = (int)in.nval;
in.nextToken();
int R = (int)in.nval;
long ans = query(L, R, 1, n, 1);
out.println(ans);
} else if(order.equals("Add")) {
in.nextToken();
int pos = (int)in.nval;
in.nextToken();
long val = (long)in.nval;
add(pos, val, 1, n, 1);
} else if(order.equals("Sub")) {
in.nextToken();
int pos = (int)in.nval;
in.nextToken();
long val = -(long)in.nval;
add(pos, val, 1, n, 1);
}
}
}
out.flush();
}
}
posted @
2015-03-26 08:19 marchalex 阅读(453) |
评论 (0) |
编辑 收藏
<!-- JSP中的指令标识 -->
<%@ page language="java" contentType="text/html;charset=gb2312" %>
<%@ page import="java.util.Date" %>
<!-- HTML标记语言 -->
<html>
<head><title>JSP页面的基本构成</title></head>
<body>
<center>
<!-- 嵌入的Java代码 -->
<% String today = new Date().toLocaleString(); %>
<!-- JSP表达式 -->
今天是:<%=today %>
<!-- HTML标记语言 -->
</center>
</body>
</html>
JSP中的指令标识:利用JSP指令可以使服务器按照指令的设置来执行和设置在整个JSP页面范围内有效的属性。
HTML标记语言:HTML标记在JSP页面中作为静态的内容,浏览器将会识别这些HTML标记并执行。
嵌入的Java代码片段:通过向JSP页面中嵌入Java代码,可以使页面生成动态的内容。
JSP表达式:JSP表达式主要用于数据的输出。它可以向页面输出内容以显示给用户,还可以用来动态地指定HTML标记中属性的值。
posted @
2015-03-24 14:03 marchalex 阅读(176) |
评论 (0) |
编辑 收藏
功能:通过按钮打开一个新窗口,并在新窗口的状态栏中显示当前年份。
(1)在主窗口中应用以下代码添加一个用于打开一个新窗口的按钮:
<input name="button" value="打开新窗口" type="button" onclick="window.open('newWindow.jsp', '', 'width=400, height=200, status=yes')">
(2)创建一个新的JSP文件,名称为newWindow.jsp,在该文件中添加以下用于显示当前年份的代码:
<script language="javascript">
var mydate = new Date();
var year = "现在是:" + mydate.getFullYear() + "年!";
document.write(year);
</script>
posted @
2015-03-24 13:35 marchalex 阅读(261) |
评论 (0) |
编辑 收藏
1.事件概述
JavaScript与Web页面之间的交互时通过用户操作浏览器页面时触发相关事件来实现的。例如:
在页面载入完毕时,将处罚load(载入)事件;
当用户单击按钮时,将触发按钮的click事件等。
用户响应某个事件而执行的处理程序称为事件处理程序。例如:
当用户单击按钮时,将触发按钮的事件处理程序onClick。
事件处理程序的两种分配方式
(1)在JavaScript中分配事件处理程序
例:
<img src="http://gi3.md.alicdn.com/bao/uploaded/i3/TB1tlxaHpXXXXXtaXXXXXXXXXXX_!!0-item_pic.jpg_430x430q90.jpg" id="aimage">
<script language="javascript">
var img = document.getElementById("aimage");
img.onclick = function() {
alert('单击了图片');
}
</script>
在页面中加入上面的代码并运行,则当单击图片aimage时,将弹出“单击了图片”对话框。
在JavaScript中分配时间处理程序时,事件处理程序名称必须小写,才能正确响应事件。
(2)在HTML中分配事件处理程序
例:
<img src="http://gi3.md.alicdn.com/bao/uploaded/i3/TB1tlxaHpXXXXXtaXXXXXXXXXXX_!!0-item_pic.jpg_430x430q90.jpg" onclick="alert('单击了图片');">
2.事件类型
UI事件:如load、unload、error、resize、scroll、select、DOMActive,是用户与页面上的元素交互时触发的。
焦点事件:如blur、DOMFocusIn、DOMFocusOut、focus、focusin、focusout,在元素获得或失去焦点的时候触发,这些事件当中,最为重要的是blur和focus,有一点需要引起注意,这一类事件不会发生冒泡!
鼠标与滚轮事件:如click、dblclick、mousedown、mouseenter、mouseleave、mousemove、mouseout、mouseover、mouseup,是当用户通过鼠标在页面执行操作时所触发的。
滚轮事件:mousewheel(IE6+均支持)、DOMMouseScroll(FF支持的,与mousewheel效果一样)。是使用鼠标滚轮时触发的。
文本事件:textInput,在文档中输入文本触发。
键盘事件:keydown、keyup、keypress,当用户通过键盘在页面中执行操作时触发。
合成事件:DOM3级新增,用于处理IME的输入序列。所谓IME,指的是输入法编辑器,可以让用户输入在物理键盘上找不到的字符。compositionstart、compositionupdate、compositionend三种事件。
变动事件:DOMsubtreeModified、DOMNodeInserted、DOMNodeRemoved、DOMAttrModified、DOMCharacterDataModified等,当底层DOM结构发生变化时触发。IE8-不支持。
变动名称事件:指的是当元素或者属性名变动时触发,当前已经弃用!
对于事件的基本类型,随着HTML5的出现和发展,又新增了HTML5事件、设备事件、触摸事件、手势事件等各种事件。
posted @
2015-03-24 10:58 marchalex 阅读(193) |
评论 (0) |
编辑 收藏
在JSP中引入JavaScript
1.在页面中直接嵌入JavaScript
<script language="javascript">...</script>
2.连接外部JavaScript
<script language="javascript" src="sample.js"></script>
变量的声明用var
var variable;
var variable = value;
写的函数
document.write(str);
函数的定义
function functionName([parameter1, parameter2, ...]) {
statements
[return expression]
}
元素的获取
document.getElementById(id);
posted @
2015-03-24 09:50 marchalex 阅读(136) |
评论 (0) |
编辑 收藏
Vector类常用方法:
add(int index, Object element);
addElementAt(Object obj, int index);
size();
elementAt(int index);
setElementAt(Object obj, int index);
removeElementAt(int index);
Vector类实例:实现创建空的Vector对象,并向其添加元素,然后输出所有元素。
<%@ page import="java.util.*" %>
<%
Vector v = new Vector(); //创建空的Vector对象
for(int i=0;i<3;i++) {
v.add(new String("福娃" + i));
}
v.remove(1); //移除索引位置为1的元素
//显示全部元素
for(int i=0;i<v.size();i++) {
out.println(v.indexOf(v.elementAt(i))+": "+v.elementAt(i));
}
%>
显示结果为:
0: 福娃0 1: 福娃2
posted @
2015-03-23 11:03 marchalex 阅读(179) |
评论 (0) |
编辑 收藏
Java容器之ArrayList类
List集合的实例化:
List<String> l = new ArrayList<String>(); //使用ArrayList类实例化List集合
List<String> l2 = new LinkedList<String>(); //使用LinkedList类实例化List集合
ArrayList常用方法:
add(int index, Object obj);
addAll(int, Collection coll);
remove(int index);
set(int index, Object obj);
get(int index);
indexOf(Object obj);
lastIndexOf(Object obj);
listIterator();
ListIterator(int index);
ArrayList示例:实现创建空的ArrayList对象,并向其添加元素,然后输出所有元素。
<%@ page import="java.util.*" %>
<%
List<String> list = new ArrayList<String>();
for(int i=0;i<3;i++) {
list.add(new String("福娃" + i));
}
list.add(1, "后添加的福娃");
//输出所有元素
Iterator<String> it = list.iterator();
while(it.hasNext()) {
out.println(it.next());
}
%>
输出结果为:
福娃0 后添加的福娃 福娃1 福娃2
LinkedList类的用法与ArrayList类类似。
posted @
2015-03-23 10:57 marchalex 阅读(157) |
评论 (0) |
编辑 收藏
JSP显示时间的小应用,用于显示时间并对不同时间显示不同提示。
如:我在写这篇博客时打开的效果如下:
温馨提示! |
现在时间为:2015-03-23 10:17:28 |
午休时间!正午好时光! |
代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Date,java.text.*" %>
<%
Date nowday = new Date(); //获取当前时间
int hour = nowday.getHours(); //获取日期中的小时
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //定义日期格式化对象
String time = format.format(nowday); //将指定日期格式化为“yyyy-MM-dd HH:mm:ss”形式
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>获取当前时间的JSP程序</title>
</head>
<body>
<center>
<table border="1" width="300">
<tr height="30"><td align="center">温馨提示!</td></tr>
<tr height="80"><td align="center">现在时间为:<%= time %></td></tr>
<tr height="70">
<td align="center">
<!-- 以下为嵌入到HTML中的Java代码,用来生成动态的内容 -->
<%
if(hour >= 24 && hour < 5)
out.print("现在是凌晨!时间还很早,再睡一会儿吧!");
else if(hour >= 5 && hour < 10)
out.print("早上好!新的一天即将开始,您准备好了吗?");
else if(hour >= 10 && hour < 13)
out.print("午休时间!正午好时光!");
else if(hour >= 13 && hour < 18)
out.print("下午继续努力工作吧!");
else if(hour >= 18 && hour < 24)
out.print("已经是深夜了,注意休息哦!");
%>
</td>
</tr>
</table>
</center>
</body>
</html>
posted @
2015-03-23 10:19 marchalex 阅读(215) |
评论 (0) |
编辑 收藏