s=a*a+2*a*b+b*b 已經(jīng)是一個賦值表達(dá)式了,把表達(dá)式a*a+2*a*b+b*b的運(yùn)算結(jié)果賦給s。

為信豐等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及信豐網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站建設(shè)、成都網(wǎng)站制作、信豐網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
import java.util.Collections;
import java.util.Stack;
public class Calculator {
private StackString postfixStack = new StackString();//后綴式棧
private StackCharacter opStack = new StackCharacter();//運(yùn)算符棧
private int [] operatPriority = new int[] {0,3,2,1,-1,1,0,2};//運(yùn)用運(yùn)算符ASCII碼-40做索引的運(yùn)算符優(yōu)先級
public static void main(String[] args) {
System.out.println(5+12*(3+5)/7.0);
Calculator cal = new Calculator();
String s = "5+12*(3+5)/7";
double result = cal.calculate(s);
System.out.println(result);
}
/**
* 按照給定的表達(dá)式計算
* @param expression 要計算的表達(dá)式例如:5+12*(3+5)/7
* @return
*/
public double calculate(String expression) {
StackString resultStack = new StackString();
prepare(expression);
Collections.reverse(postfixStack);//將后綴式棧反轉(zhuǎn)
String firstValue ,secondValue,currentValue;//參與計算的第一個值,第二個值和算術(shù)運(yùn)算符
while(!postfixStack.isEmpty()) {
currentValue = postfixStack.pop();
if(!isOperator(currentValue.charAt(0))) {//如果不是運(yùn)算符則存入操作數(shù)棧中
resultStack.push(currentValue);
} else {//如果是運(yùn)算符則從操作數(shù)棧中取兩個值和該數(shù)值一起參與運(yùn)算
secondValue = resultStack.pop();
firstValue = resultStack.pop();
String tempResult = calculate(firstValue, secondValue, currentValue.charAt(0));
resultStack.push(tempResult);
}
}
return Double.valueOf(resultStack.pop());
}
/**
* 數(shù)據(jù)準(zhǔn)備階段將表達(dá)式轉(zhuǎn)換成為后綴式棧
* @param expression
*/
private void prepare(String expression) {
opStack.push(',');//運(yùn)算符放入棧底元素逗號,此符號優(yōu)先級最低
char[] arr = expression.toCharArray();
int currentIndex = 0;//當(dāng)前字符的位置
int count = 0;//上次算術(shù)運(yùn)算符到本次算術(shù)運(yùn)算符的字符的長度便于或者之間的數(shù)值
char currentOp ,peekOp;//當(dāng)前操作符和棧頂操作符
for(int i=0;iarr.length;i++) {
currentOp = arr[i];
if(isOperator(currentOp)) {//如果當(dāng)前字符是運(yùn)算符
if(count 0) {
postfixStack.push(new String(arr,currentIndex,count));//取兩個運(yùn)算符之間的數(shù)字
}
peekOp = opStack.peek();
if(currentOp == ')') {//遇到反括號則將運(yùn)算符棧中的元素移除到后綴式棧中直到遇到左括號
while(opStack.peek() != '(') {
postfixStack.push(String.valueOf(opStack.pop()));
}
opStack.pop();
} else {
while(currentOp != '(' peekOp != ',' compare(currentOp,peekOp) ) {
postfixStack.push(String.valueOf(opStack.pop()));
peekOp = opStack.peek();
}
opStack.push(currentOp);
}
count = 0;
currentIndex = i+1;
} else {
count++;
}
}
if(count 1 || (count == 1 !isOperator(arr[currentIndex]))) {//最后一個字符不是括號或者其他運(yùn)算符的則加入后綴式棧中
postfixStack.push(new String(arr,currentIndex,count));
}
while(opStack.peek() != ',') {
postfixStack.push(String.valueOf( opStack.pop()));//將操作符棧中的剩余的元素添加到后綴式棧中
}
}
/**
* 判斷是否為算術(shù)符號
* @param c
* @return
*/
private boolean isOperator(char c) {
return c == '+' || c == '-' || c == '*' || c == '/' || c == '(' ||c == ')';
}
/**
* 利用ASCII碼-40做下標(biāo)去算術(shù)符號優(yōu)先級
* @param cur
* @param peek
* @return
*/
public boolean compare(char cur,char peek) {// 如果是peek優(yōu)先級高于cur,返回true,默認(rèn)都是peek優(yōu)先級要低
boolean result = false;
if(operatPriority[(peek)-40] = operatPriority[(cur) - 40]) {
result = true;
}
return result;
}
/**
* 按照給定的算術(shù)運(yùn)算符做計算
* @param firstValue
* @param secondValue
* @param currentOp
* @return
*/
private String calculate(String firstValue,String secondValue,char currentOp) {
String result = "";
switch(currentOp) {
case '+':
result = String.valueOf(ArithHelper.add(firstValue, secondValue));
break;
case '-':
result = String.valueOf(ArithHelper.sub(firstValue, secondValue));
break;
case '*':
result = String.valueOf(ArithHelper.mul(firstValue, secondValue));
break;
case '/':
result = String.valueOf(ArithHelper.div(firstValue, secondValue));
break;
}
return result;
}
}
public class ArithHelper {
// 默認(rèn)除法運(yùn)算精度
private static final int DEF_DIV_SCALE = 16;
// 這個類不能實(shí)例化
private ArithHelper() {
}
/**
* 提供精確的加法運(yùn)算。
*
* @param v1 被加數(shù)
* @param v2 加數(shù)
* @return 兩個參數(shù)的和
*/
public static double add(double v1, double v2) {
java.math.BigDecimal b1 = new java.math.BigDecimal(Double.toString(v1));
java.math.BigDecimal b2 = new java.math.BigDecimal(Double.toString(v2));
return b1.add(b2).doubleValue();
}
public static double add(String v1, String v2) {
java.math.BigDecimal b1 = new java.math.BigDecimal(v1);
java.math.BigDecimal b2 = new java.math.BigDecimal(v2);
return b1.add(b2).doubleValue();
}
/**
* 提供精確的減法運(yùn)算。
*
* @param v1 被減數(shù)
* @param v2 減數(shù)
* @return 兩個參數(shù)的差
*/
public static double sub(double v1, double v2) {
java.math.BigDecimal b1 = new java.math.BigDecimal(Double.toString(v1));
java.math.BigDecimal b2 = new java.math.BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
}
public static double sub(String v1, String v2) {
java.math.BigDecimal b1 = new java.math.BigDecimal(v1);
java.math.BigDecimal b2 = new java.math.BigDecimal(v2);
return b1.subtract(b2).doubleValue();
}
/**
* 提供精確的乘法運(yùn)算。
*
* @param v1
* 被乘數(shù)
* @param v2
* 乘數(shù)
* @return 兩個參數(shù)的積
*/
public static double mul(double v1, double v2) {
java.math.BigDecimal b1 = new java.math.BigDecimal(Double.toString(v1));
java.math.BigDecimal b2 = new java.math.BigDecimal(Double.toString(v2));
return b1.multiply(b2).doubleValue();
}
public static double mul(String v1, String v2) {
java.math.BigDecimal b1 = new java.math.BigDecimal(v1);
java.math.BigDecimal b2 = new java.math.BigDecimal(v2);
return b1.multiply(b2).doubleValue();
}
/**
* 提供(相對)精確的除法運(yùn)算,當(dāng)發(fā)生除不盡的情況時,精確到 小數(shù)點(diǎn)以后10位,以后的數(shù)字四舍五入。
*
* @param v1
* 被除數(shù)
* @param v2
* 除數(shù)
* @return 兩個參數(shù)的商
*/
public static double div(double v1, double v2) {
return div(v1, v2, DEF_DIV_SCALE);
}
public static double div(String v1, String v2) {
java.math.BigDecimal b1 = new java.math.BigDecimal(v1);
java.math.BigDecimal b2 = new java.math.BigDecimal(v2);
return b1.divide(b2, DEF_DIV_SCALE, java.math.BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 提供(相對)精確的除法運(yùn)算。當(dāng)發(fā)生除不盡的情況時,由scale參數(shù)指 定精度,以后的數(shù)字四舍五入。
*
* @param v1 被除數(shù)
* @param v2 除數(shù)
* @param scale 表示表示需要精確到小數(shù)點(diǎn)以后幾位。
* @return 兩個參數(shù)的商
*/
public static double div(double v1, double v2, int scale) {
if (scale 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
java.math.BigDecimal b1 = new java.math.BigDecimal(Double.toString(v1));
java.math.BigDecimal b2 = new java.math.BigDecimal(Double.toString(v2));
return b1.divide(b2, scale, java.math.BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 提供精確的小數(shù)位四舍五入處理。
*
* @param v 需要四舍五入的數(shù)字
* @param scale 小數(shù)點(diǎn)后保留幾位
* @return 四舍五入后的結(jié)果
*/
public static double round(double v, int scale) {
if (scale 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
java.math.BigDecimal b = new java.math.BigDecimal(Double.toString(v));
java.math.BigDecimal one = new java.math.BigDecimal("1");
return b.divide(one, scale, java.math.BigDecimal.ROUND_HALF_UP).doubleValue();
}
public static double round(String v, int scale) {
if (scale 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
java.math.BigDecimal b = new java.math.BigDecimal(v);
java.math.BigDecimal one = new java.math.BigDecimal("1");
return b.divide(one, scale, java.math.BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
Java是面向表達(dá)式的語言,Java中一個簡單表達(dá)式可以是下面任意一種:● 常量:7、false。● 單引號括起來的字符字面常量:'A'、'3'。● 雙引號括起來的字符串字面常量:"foo"、"Java"。● 任何正確聲明的變量名:myString、x。● 任何用Java二元運(yùn)算符(本章稍后將詳細(xì)討論)連接起來的兩個上述類型的表達(dá)式:x+2。● 任何用Java一元運(yùn)算符(本章稍后將詳細(xì)討論)修飾的單個上述類型的表達(dá)式:i++。● 任何用小括號括起來的上述類型的表達(dá)式:(x+2)。以及另外一些與本書后面將要學(xué)到的對象有關(guān)的表達(dá)式類型。無論多么復(fù)雜的表達(dá)式都可以由不同類型的簡單表達(dá)式和括號嵌套組合而成,例如:((((4/x) + y) * 7) + z)。2.9.1 算術(shù)運(yùn)算符 Java語言提供了許多基本的算術(shù)運(yùn)算符,如表2-1所示。表2-1 Java算術(shù)運(yùn)算符運(yùn)算符描 述+加法-減法*乘法/除法%求余(%左邊的操作數(shù)除以右邊的
操作數(shù)所得到的余數(shù),例如10%3=1)+和-運(yùn)算符也可作為一元運(yùn)算符用于表示正負(fù)數(shù):-3.7、+42。除了簡單賦值運(yùn)算符=,還有許多特定的復(fù)合賦值運(yùn)算符,這些運(yùn)算符將變量賦值和算術(shù)操作合并在一起,如表2-2所示。表2-2 Java復(fù)合賦值運(yùn)算符運(yùn)算符描 述+=a+=b等價于a=a+b-=a-=b等價于a=a-b*=a*=b等價于a=a*b/=a/=b等價于a=a/b%=a%=b等價于a=a%b最后要介紹的兩個算術(shù)運(yùn)算符是一元遞增運(yùn)算符(++)和一元遞減運(yùn)算符(--),用于將整數(shù)變量的值加1或減1,或者將浮點(diǎn)數(shù)變量的值加1.0或減1.0。稱它們?yōu)橐辉\(yùn)算符是因?yàn)樗鼈冇糜趩蝹€變量,而前面討論的二元運(yùn)算符則連接兩個表達(dá)式的值。一元遞增運(yùn)算符和一元遞減運(yùn)算符也可用于將字符變量在Unicode序列中向前或向后移動一個字符位置。例如,在下面的代碼片段中,字符變量c的值從'e'遞增為'f':遞增和遞減運(yùn)算符可以以前綴或者后綴方式使用。如果運(yùn)算符放在操作數(shù)之前(前綴模式),變量的遞增或遞減操作將在更新后的變量值被用于任何由它構(gòu)成的賦值操作之前執(zhí)行。例如,考慮下面的使用前綴遞增運(yùn)算符的代碼片段,假設(shè)a和b在程序前面已經(jīng)聲明為int變量:上述代碼執(zhí)行后,變量a的值是2,變量b的值也是2。這是因?yàn)樵诘诙兄凶兞縜的遞增(從1到2)發(fā)生在它的值賦給b之前。因此這行代碼在邏輯上等價于下面兩行代碼: 另一方面,如果運(yùn)算符放在操作數(shù)之后(后綴模式),遞增或遞減操作發(fā)生在原來的變量值被用于任何由它構(gòu)成的賦值操作之后。看一下以后綴方式使用遞增運(yùn)算符的相同代碼片段:上述代碼執(zhí)行后,變量b的值是1,而變量a的值是2。這是因?yàn)樵诘诙兄凶兞縜的遞增(從1到2)發(fā)生在它的值賦給b之后。因此這行代碼在邏輯上等價于下面兩行代碼:下面是一個稍微復(fù)雜一點(diǎn)例子,請閱讀附加的注釋以確保你能夠明白x最終是如何被賦值為10的:稍后將會看到,遞增和遞減運(yùn)算符通常和循環(huán)一起使用。2.9.2 關(guān)系和邏輯運(yùn)算符邏輯表達(dá)式以指定的方式比較兩個(簡單或者復(fù)雜)表達(dá)式exp1和exp2,決議出一個boolean值true或者false。 Java提供了表2-3所示的關(guān)系運(yùn)算符來創(chuàng)建邏輯表達(dá)式。表2-3 Java關(guān)系運(yùn)算符運(yùn)算符描 述exp1==exp2如果exp1等于exp2,值為true(注意使用雙等號測試相等性)exp1exp2如果exp1大于exp2,值為trueexp1=exp2如果exp1大于等于exp2,值為trueexp1exp2如果exp1小于exp2,值為trueexp1=exp2如果exp1小于等于exp2,值為trueexp1!=exp2如果exp1不等于exp2,值為true!exp如果exp為false值為true,如果exp為true值為false除了關(guān)系運(yùn)算符,Java還提供了用于組合/修飾邏輯表達(dá)式的邏輯運(yùn)算符。表2-4列出了最常用的邏輯運(yùn)算符。表2-4 Java邏輯運(yùn)算符運(yùn)算符描 述exp1exp2邏輯“與”,僅當(dāng)exp1和exp2都為true時復(fù)合表達(dá)式值為trueexp1||exp2邏輯“或”,exp1或exp2值為true時復(fù)合表達(dá)式值為true!exp邏輯“非”,將邏輯表達(dá)式的值從true切換到false,反之亦然下面這個例子用邏輯“與”運(yùn)算符來編程實(shí)現(xiàn)邏輯表達(dá)式“如果x大于2.0且y不等于4.0”:邏輯表達(dá)式常用于流程控制結(jié)構(gòu),本章稍后將進(jìn)行討論。2.9.3 表達(dá)式求值和運(yùn)算符優(yōu)先級如同本章前面提到的那樣,任何復(fù)雜的表達(dá)式都可以用分層嵌套的小括號構(gòu)成,例如(((8 * (y + z)) + y) x)。編譯器通常按照從內(nèi)到外,從左到右的順序?qū)@樣的表達(dá)式求值。假設(shè)x、y、z按照下面的方式聲明并初始化:下面的賦值語句右邊的表達(dá)式:將像下面這樣逐步求值:沒有小括號時,根據(jù)運(yùn)算符用于表達(dá)式求值的順序,某些運(yùn)算符具有高于其他運(yùn)算符的優(yōu)先級。例如,乘除法先于加減法執(zhí)行。通過使用小括號可以強(qiáng)制改變運(yùn)算符的優(yōu)先級,括號內(nèi)的運(yùn)算符比括號外的先執(zhí)行。考慮下面的代碼片段:代碼的第一行沒有使用括號,乘法操作比加法操作先執(zhí)行,因此整個表達(dá)式的值為2+12=14,就像我們將表達(dá)式明確地寫成2+(3*4)一樣,當(dāng)然這樣做沒有必要。 在代碼的第二行,括號被明確地放在操作2+3兩邊,因此加法操作將首先執(zhí)行,然后求和結(jié)果乘以4作為整個表達(dá)式的值,即5*4=20。回到前面的例子注意到和!=運(yùn)算符優(yōu)先級高于運(yùn)算符,因此可以去掉嵌套的括號而變成下面這樣:然而,額外的括號并不會對代碼造成傷害,事實(shí)上它可以使表達(dá)式的目的更加清楚。2.9.4 表達(dá)式類型表達(dá)式類型是表達(dá)式最終求值結(jié)果的Java類型。例如給定下面的代碼片段:表達(dá)式(x 2.0) (y != 4.0)求值結(jié)果為true,因此表達(dá)式(x 2.0) (y != 4.0)稱為boolean型表達(dá)式。在下面的代碼片段中:表達(dá)式((8 * (y + z)) + y) * x求值結(jié)果為42,因此表達(dá)式((8 * (y + z)) + y) * x稱為整型表達(dá)式。
這是我的blog上面的詳細(xì)介紹。配中文字符的正則表達(dá)式: [\u4e00-\u9fa5]
匹配雙字節(jié)字符(包括漢字在內(nèi)):[^\x00-\xff]
應(yīng)用:計算字符串的長度(一個雙字節(jié)字符長度計2,ASCII字符計1)
String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}
匹配空行的正則表達(dá)式:\n[\s| ]*\r
匹配HTML標(biāo)記的正則表達(dá)式:/(.*).*\/\1|(.*) \//
匹配首尾空格的正則表達(dá)式:(^\s*)|(\s*$)
應(yīng)用:javascript中沒有像vbscript那樣的trim函數(shù),我們就可以利用這個表達(dá)式來實(shí)現(xiàn),如下:
String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, "");
}
利用正則表達(dá)式分解和轉(zhuǎn)換IP地址:
下面是利用正則表達(dá)式匹配IP地址,并將IP地址轉(zhuǎn)換成對應(yīng)數(shù)值的Javascript程序:
function IP2V(ip)
{
re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正則表達(dá)式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
}
不過上面的程序如果不用正則表達(dá)式,而直接用split函數(shù)來分解可能更簡單,程序如下:
var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
匹配Email地址的正則表達(dá)式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配網(wǎng)址URL的正則表達(dá)式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%=]*)?
利用正則表達(dá)式去除字串中重復(fù)的字符的算法程序:[注:此程序不正確,原因見本貼回復(fù)]
var s="abacabefgeeii"
var s1=s.replace(/(.).*\1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2) //結(jié)果為:abcefgi
我原來在CSDN上發(fā)貼尋求一個表達(dá)式來實(shí)現(xiàn)去除重復(fù)字符的方法,最終沒有找到,這是我能想到的最簡單的實(shí)現(xiàn)方法。思路是使用后向引用取出包括重復(fù)的字符,再以重復(fù)的字符建立第二個表達(dá)式,取到不重復(fù)的字符,兩者串連。這個方法對于字符順序有要求的字符串可能不適用。
得用正則表達(dá)式從URL地址中提取文件名的javascript程序,如下結(jié)果為page1
s=" "
s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")
alert(s)
利用正則表達(dá)式限制網(wǎng)頁表單里的文本框輸入內(nèi)容:
用正則表達(dá)式限制只能輸入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
用正則表達(dá)式限制只能輸入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"
用正則表達(dá)式限制只能輸入數(shù)字:onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
用正則表達(dá)式限制只能輸入數(shù)字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" 出處:藍(lán)色理想
前一段時間寫了2段EmEditor的宏,用來統(tǒng)計代碼行數(shù)和簡單的規(guī)約檢查,稍微整理一下,
下面是從EmEditor的QA的提取的實(shí)例:雙引號包含的字符串
strings surrounded by double-quotation marks
“.*?” [ ]包含的字符串
strings surrounded by [ ]
\[[^\[]*?\] 變量名
variable names
[a-zA-Z_][a-zA-Z_0-9]* IP 地址
IP addresses
([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3}) 網(wǎng)頁地址
URL
(\S+)://([^:/]+)(:(\d+))?(/[^#\s]*)(#(\S+))? 各行Tab以后的文字列
lines followed by a tab
\t.*$ 平仮名 ひらがな
Hiragana
[\x{3041}-\x{309e}] 全角片仮名 全角カタカナ
Full-width Katakana
[\x{309b}-\x{309c}\x{30a1}-\x{30fe}] 半角仮名 半角カナ
Half-width Kana
[\x{ff61}-\x{ff9f}] 中日韓 漢字
CJK ideographs
[\x{3400}-\x{9fff}\x{f900}-\x{fa2d}] 中日韓 漢字符號
CJK ideograph marks
[\x{3000}-\x{3037}] 韓國字符
Hangul
[\x{1100}-\x{11f9}\x{3131}-\x{318e}\x{ac00}-\x{d7a3}] 行頭插入 //
Insert // at start of lines
Find: ^
Replace with: // 刪除行頭 //
Remove // at end of lines
Find: ^//
Replace: 刪除行后的空白文字(包含空格和制表位 Space+Tab)
Remove trailing whitespaces
Find: \s+?$
Replace with: 將(abc)替換為[abc]
Replace (abc) with [abc]
Find: \((.*?)\)
Replace: \[\1\] 將H3 …替換為H4 …
Replace H3 … with H4 …
Find: H3(.*?)
Replace: H4\1 將9/13/2003替換為2003年9月13日
Replace 9/13/2003 with 2003.9.13
Find: ([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})
Replace: \3年\1月\2日 將字母a-z替換為大寫字母
Uppercase characters from a to z
Find: [a-z]
Replace: \U\0 首字母大寫
Capitalize all words
Find: ([a-zA-Z])([a-zA-Z]*)
Replace: \U\1\L\2
\S{6,18}
以下是常用的正則表達(dá)式希望能幫到你。
size=12px]1。^\d+$//匹配非負(fù)整數(shù)(正整數(shù) + 0)
2。^[0-9]*[1-9][0-9]*$//匹配正整數(shù)
3。^((-\d+)|(0+))$//匹配非正整數(shù)(負(fù)整數(shù) + 0)
4。^-[0-9]*[1-9][0-9]*$//匹配負(fù)整數(shù)
5。^-?\d+$//匹配整數(shù)
6。^\d+(\.\d+)?$//匹配非負(fù)浮點(diǎn)數(shù)(正浮點(diǎn)數(shù) + 0)
7。^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$//匹配正浮點(diǎn)數(shù)
8。^((-\d+(\.\d+)?)|(0+(\.0+)?))$//匹配非正浮點(diǎn)數(shù)(負(fù)浮點(diǎn)數(shù) + 0)
9。^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$//匹配負(fù)浮點(diǎn)數(shù)
10。^(-?\d+)(\.\d+)?$//匹配浮點(diǎn)數(shù)
11。^[A-Za-z]+$//匹配由26個英文字母組成的字符串
12。^[A-Z]+$//匹配由26個英文字母的大寫組成的字符串
13。^[a-z]+$//匹配由26個英文字母的小寫組成的字符串
14。^[A-Za-z0-9]+$//匹配由數(shù)字和26個英文字母組成的字符串
15。^\w+$//匹配由數(shù)字、26個英文字母或者下劃線組成的字符串
16。^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$//匹配email地址
17。^[a-zA-z]+://匹配(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$//匹配url
18。匹配中文字符的正則表達(dá)式: [\u4e00-\u9fa5]
19。匹配雙字節(jié)字符(包括漢字在內(nèi)):[^\x00-\xff]
20。應(yīng)用:計算字符串的長度(一個雙字節(jié)字符長度計2,ASCII字符計1)
String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}
21。匹配空行的正則表達(dá)式:\n[\s| ]*\r
22。匹配HTML標(biāo)記的正則表達(dá)式:/(.*).*\/\1|(.*) \//
23。匹配首尾空格的正則表達(dá)式:(^\s*)|(\s*$)
Java中正則表達(dá)式匹配的語法規(guī)則:
以下是整理出來的Java下運(yùn)用正則表達(dá)式實(shí)現(xiàn)匹配的程序案例,代碼如下:
package?org.luosijin.test;
import?java.util.regex.Matcher;
import?java.util.regex.Pattern;
/**
*?正則表達(dá)式
*?@version?V5.0
*?@author?Admin
*?@date???2015-7-25
*/
public?class?Regex?{
/**
*?@param?args
*?@author?Admin
*?@date?2015-7-25
*/
public?static?void?main(String[]?args)?{
Pattern?pattern?=?Pattern.compile("b*g");
Matcher?matcher?=?pattern.matcher("bbg");
System.out.println(matcher.matches());
System.out.println(pattern.matches("b*g","bbg"));
//驗(yàn)證郵政編碼
System.out.println(pattern.matches("[0-9]{6}",?"200038"));
System.out.println(pattern.matches("http://d{6}",?"200038"));
//驗(yàn)證電話號碼
System.out.println(pattern.matches("[0-9]{3,4}//-?[0-9]+",?"02178989799"));
getDate("Nov?10,2009");
charReplace();
//驗(yàn)證身份證:判斷一個字符串是不是身份證號碼,即是否是15或18位數(shù)字。
System.out.println(pattern.matches("^//d{15}|//d{18}$",?"123456789009876"));
getString("D:/dir1/test.txt");
getChinese("welcome?to?china,江西奉新,welcome,你!");
validateEmail("luosijin123@163.com");
}
/**
*?日期提取:提取出月份來
*?@param?str
*?@author?Admin
*?@date?2015-7-25
*/
public?static?void?getDate(String?str){
String?regEx="([a-zA-Z]+)|//s+[0-9]{1,2},//s*[0-9]{4}";
Pattern?pattern?=?Pattern.compile(regEx);
Matcher?matcher?=?pattern.matcher(str);
if(!matcher.find()){
System.out.println("日期格式錯誤!");
return;
}
System.out.println(matcher.group(1));????//分組的索引值是從1開始的,所以取第一個分組的方法是m.group(1)而不是m.group(0)。
}
/**
*?字符替換:本實(shí)例為將一個字符串中所有包含一個或多個連續(xù)的“a”的地方都替換成“A”。
*?
*?@author?Admin
*?@date?2015-7-25
*/
public?static?void?charReplace(){
String?regex?=?"a+";
Pattern?pattern?=?Pattern.compile(regex);
Matcher?matcher?=?pattern.matcher("okaaaa?LetmeAseeaaa?aa?booa");
String?s?=?matcher.replaceAll("A");
System.out.println(s);
}
/**
*?字符串提取
*?@param?str
*?@author?Admin
*?@date?2015-7-25
*/
public?static?void?getString(String?str){
String?regex?=?".+/(.+)$";
Pattern?pattern?=?Pattern.compile(regex);
Matcher?matcher?=?pattern.matcher(str);
if(!matcher.find()){
System.out.println("文件路徑格式不正確!");
return;
}
System.out.println(matcher.group(1));
}
/**
*?中文提取
*?@param?str
*?@author?Admin
*?@date?2015-7-25
*/
public?static?void?getChinese(String?str){
String?regex?=?"[//u4E00-//u9FFF]+";//[//u4E00-//u9FFF]為漢字?
Pattern?pattern?=?Pattern.compile(regex);
Matcher?matcher?=?pattern.matcher(str);
StringBuffer?sb?=?new?StringBuffer();
while(matcher.find()){
sb.append(matcher.group());
}
System.out.println(sb);
}
/**
*?驗(yàn)證Email
*?@param?email
*?@author?Admin
*?@date?2015-7-25
*/
public?static?void?validateEmail(String?email){
String?regex?=?"[0-9a-zA-Z]+@[0-9a-zA-Z]+//.[0-9a-zA-Z]+";
Pattern?pattern?=?Pattern.compile(regex);
Matcher?matcher?=?pattern.matcher(email);
if(matcher.matches()){
System.out.println("這是合法的Email");
}else{
System.out.println("這是非法的Email");
}
}
}
本文標(biāo)題:java代碼實(shí)現(xiàn)s表達(dá)式,java中%s
URL地址:http://chinadenli.net/article22/dsgshjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、網(wǎng)站收錄、建站公司、手機(jī)網(wǎng)站建設(shè)、電子商務(wù)、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)