引:Android 的API中有个 java.util.regex 包,其中有两个类,一个接口和一个异常:
Interfaces
MatchResult
Holds the results of a successful match of a Pattern against a given string.
Classes
Matcher
Provides a means of matching regular expressions against a given input,
finding occurrences of regular expressions in a given input, or
replacing parts of a given input.
Pattern
Represents a pattern used for matching, searching, or replacing strings.
Exceptions
PatternSyntaxException Encapsulates a syntax error that occurred during the compilation of a Pattern.
这个包封装了关于正则表达式的有关操作。下面是有关 正则表达式 的一些比较系统的理论。
1. 正则表达式规则
1.1 普通字符
字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号,都是"普通字符"。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。
举例1:表达式 "c",在匹配字符串 "abcde" 时,匹配结果是:成功;匹配到的内容是:"c";匹配到的位置是:开始于 ......
对象序列化就是把对象写入到输出流中,用来存储或者传输。
对象的反序列化就是从输入流中读取对象。
要序列化的对象应该实现Serializable接口。
Serializable接口是一个标识接口,没有抽象方法。
Serializable有一个子接口Externalizable,实现Externalizable接口的类可以自行控制对象序列化荷反序列化过程。
一般来说,没有必要自己实现序列化接口,直接交给Java虚拟机是上策。
实现了序列化接口的类,如果其成员不需要序列化进去,则使用transient关键字进行修饰。
下面给出个例子:
import java.io.*;
/**
* Java对象的序列化测试
* File: ObjectStreamTest.java
* User: leizhimin
* Date: 2008-3-12 20:41:43
*/
public class ObjectStreamTest {
public static void main(String ......
简单的说,内部(inner)类指那些类定义代码被置于其它类定义中的类;而对于一般的、类定义代码不嵌套在其它类定义中的类,称为顶层(top-level)类。对于一个内部类,包含其定义代码的类称为它的外部(outer)类。
1 Static member class(静态成员类)
类声明中包含“static”关键字的内部类。如以下示例代码,
Inner1/Inner2/Inner3/Inner4就是Outer的四个静态成员类。静态成员类的使用方式与一般顶层类的使用方式基本相同。
public class Outer{
//just like static method, static member class has public/private/default access privilege levels
//access privilege level: public
public static class Inner1 {
public Inner1() {
//Static member inner class can access static method of outer class
staticMethod();
//Compile error: static member inner class can not access instance method of outer class
//instanceMethod();
}
}
//access privilege level: default
static class Inner2 {
......
一:无返回值的存储过程
1、建立存储过程
CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS
BEGIN
INSERT INTO T_TEST (I_ID,I_NAME) VALUES (PARA1, PARA2);
END TESTA;
2、相应的JAVA程序
import java.sql.*;
import java.io.OutputStream;
import java.io.Writer;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import oracle.jdbc.driver.*;
public class TestProcedureOne {
public TestProcedureOne() {
}
public static void main(String[] args ){
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@192.168.10.216:1521:ctbu";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
CallableStatement cstmt = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, "dbname", "password");
CallableStatement proc = null;
proc = conn.prepareCall("{ call dbname.TESTA(?,?) }");
proc.setString(1, "100");
proc.setString(2, "TestOne");
proc.execute();
}
catch (SQLException ex2) {
ex ......
一:无返回值的存储过程
1、建立存储过程
CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS
BEGIN
INSERT INTO T_TEST (I_ID,I_NAME) VALUES (PARA1, PARA2);
END TESTA;
2、相应的JAVA程序
import java.sql.*;
import java.io.OutputStream;
import java.io.Writer;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import oracle.jdbc.driver.*;
public class TestProcedureOne {
public TestProcedureOne() {
}
public static void main(String[] args ){
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@192.168.10.216:1521:ctbu";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
CallableStatement cstmt = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, "dbname", "password");
CallableStatement proc = null;
proc = conn.prepareCall("{ call dbname.TESTA(?,?) }");
proc.setString(1, "100");
proc.setString(2, "TestOne");
proc.execute();
}
catch (SQLException ex2) {
ex ......
与线程休眠类似,线程的优先级无法保障线程的执行次序。只不过,优先级高的线程获取CPU资源的概率较大,优先级低的并非没机会执行。线程的优先级用1-10之间的整数表示,数值越大优先级越高,默认的优先级为5。在一个线程中开启另外一个新线程,则新开线程称为该线程的子线程,子线程初始优先级与父线程相同。
如下的实例sss.java:
public class sss
{
public static void main(String[] args)
{
Thread t1 = new MyThread1();
Thread t2 = new Thread(new MyRunnable());
t1.setPriority(10);
t2.setPriority(1);
t2.start();
&n ......
题目:有600个苹果,要求分装在10个盒子中。对于顾客要求的任意苹果数都可以通过此10个盒子进行组合得到。
分析:1、首先要设计10个盒子所装苹果的数目。由二进制与十进制的转换可知,2的倍数相加可以的到一切十进制数。所以如果想使用有限的数字组合得到一定范围内的所有数字必是以2的倍数进行设计的。所以,可知十个盒子里的苹果数应该是1,2,4,8,16,32,64....。
2、有10个盒子,每个盒子对应一位二进制。例如100,100的二进制表示方式1100100,他应该取:4+32+64这三个盒子,也就是位数为1的那几个。同时,由于10位二进制能表示的最大数是1023(也就是相当于盒子相加之和),但要以600为总数,所以只能取9位,9位能表示的最大数是511。所以最后一个盒子应该装600-511=89。所以盒子里所装苹果应该是1,2,4,8,16,32,64,128,256,89。
3、当顾客给出要求的苹果数后,如果小于511,就可以转为二进制,翻转,取1对应的盒子即可。如果大于511,就要先减去89,再转为二进制,翻转取盒,最后加上第十个盒子。
实现代码如下:
//600个苹果,分装10个盒子,要求对任意顾客要求 ......