??xml version="1.0" encoding="utf-8" standalone="yes"?> 正则表达式用于字W串处理、表单验证等场合Q实用高效。现一些常用的表达式收集于此,以备不时之需?br />
匚w中文字符的正则表辑ּQ?[\u4e00-\u9fa5] 匚w双字节字W?包括汉字在内)Q[^\x00-\xff] 匚wI白行的正则表达式:\n\s*\r 匚wHTML标记的正则表辑ּQ?lt;(\S*?)[^>]*>.*?</\1>|<.*? /> 匚w首尾I白字符的正则表辑ּQ^\s*|\s*$ 匚wEmail地址的正则表辑ּQ\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 匚w|址URL的正则表辑ּQ[a-zA-z]+://[^\s]* 匚w帐号是否合法(字母开_允许5-16字节Q允许字母数字下划线)Q^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 匚w国内?sh)话L(fng)Q\d{3}-\d{8}|\d{4}-\d{7} 匚w腾讯QQP[1-9][0-9]{4,} 匚w中国邮政~码Q[1-9]\d{5}(?!\d) 匚ww䆾证:\d{15}|\d{18} 匚wip地址Q\d+\.\d+\.\d+\.\d+ 匚w特定数字Q?br />
^[1-9]\d*$ //匚w正整?br />
^-[1-9]\d*$ //匚w负整?br />
^-?[1-9]\d*$ //匚w整数 匚w特定字符Ԍ 原蝲地址Qhttp://lifesinger.3322.org/myblog/?p=185
评注Q匹配中文还真是个头疼的事,有了q个表达式就好办?/p>
评注Q可以用来计字W串的长度(一个双字节字符长度?QASCII字符?Q?/p>
评注Q可以用来删除空白行
评注Q网上流传的版本太糟p,上面q个也仅仅能匚w部分Q对于复杂的嵌套标记依旧无能为力
评注Q可以用来删除行首行I白字符(包括I格、制表符、换늬{等)Q非常有用的表达?/p>
评注Q表单验证时很实?/p>
评注Q网上流传的版本功能很有限,上面q个基本可以满需?/p>
评注Q表单验证时很实?/p>
评注Q匹配Ş式如 0511-4405222 ?021-87888822
评注Q腾讯QQ号从10000开?/p>
评注Q中国邮政编码ؓ(f)6位数?/p>
评注Q中国的w䆾证ؓ(f)15位或18?/p>
评注Q提取ip地址时有?/p>
^[1-9]\d*|0$ //匚w非负整数Q正整数 + 0Q?br />
^-[1-9]\d*|0$ //匚w非正整数Q负整数 + 0Q?br />
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匚w正QҎ(gu)
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匚w负QҎ(gu)
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匚w点?br />
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匚w非负点敎ͼ正QҎ(gu) + 0Q?br />
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匚w非正点敎ͼ负QҎ(gu) + 0Q?br />
评注Q处理大量数据时有用Q具体应用时注意修正
^[A-Za-z]+$ //匚w?6个英文字母组成的字符?br />
^[A-Z]+$ //匚w?6个英文字母的大写l成的字W串
^[a-z]+$ //匚w?6个英文字母的写l成的字W串
^[A-Za-z0-9]+$ //匚w由数字和26个英文字母组成的字符?br />
^\w+$ //匚w由数字?6个英文字母或者下划线l成的字W串
评注Q最基本也是最常用的一些表辑ּ
]]>
<property name="mappingDirectoryLocations">
<list>
<value>HBM.XML文g目录</value>
</list>
</property>
看了SPRING的一些源代码Q再ơ感?span class="hilite1">SPRING配置的威力!
]]>
攑֜ Ext.onReady(function() 下面 h 本地的s.gif
q样避免不在公|的目不断的请求官|请求了
自动行号 的列上加个标?new Ext.grid.RowNumberer({header:'aaa',width:30}),
]]>
new Ext.grid.RowNumberer(),
sm,
{header:'~号',dataIndex:'id',sortable:true},
{header:'性别',dataIndex:'sex',sortable:true ,renderer:renderSex},
{header:'名称',dataIndex:'name'},
{header:'描述',dataIndex:'descn',renderer:renderDescn}
]);
var data = [
['1','male','name1','descn1'],
['2','female','name2','descn2'],
['3','male','name3','descn3'],
['4','female','name4','descn4'],
['5','male','name5','descn5']
];
var ds = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({url:'http://192.168.0.219/ext-2.1/examples/helloworld/grid.php'}),
reader: new Ext.data.JsonReader({
totalProperty: 'totalProperty',
root: 'root'
}, [
{name: 'id'},
{name: 'sex'},
{name: 'name'},
{name: 'descn'}
])
});
function renderSex(value) {
if (value == 'male') {
return "<span style='color:red;font-weight:bold;'>?lt;/span>";
} else {
return "<span style='color:green;font-weight:bold;'>?lt;/span>";
}
}
function renderDescn(value, cellmeta, record, rowIndex, columnIndex, store) {
var str = "<input type='button' value='详细信息' onclick='alert(\"" +
"q个单元格的值是Q? + value + "\\n" +
"q个单元格的配置是:{cellId:" + cellmeta.cellId + ",id:" + cellmeta.id + ",css:" + cellmeta.css + "}\\n" +
"q个单元格对应行的record是:" + record.data["id"] + "Q一行的数据都在里边\\n" +
"q是W? + rowIndex + "行\\n" +
"q是W? + columnIndex + "列\\n" +
"q个表格对应的Ext.data.Store在这里:" + store + "Q随便用吧? +
"\")'>";
return str;
}
var grid = new Ext.grid.GridPanel({
el: 'grid',
ds: ds,
cm: cm,
sm: sm,
bbar: new Ext.PagingToolbar({
pageSize: 10,
store: ds,
displayInfo: true,
displayMsg: '昄W?{0} 条到 {1} 条记录,一?{2} ?,
emptyMsg: "没有记录"
})
});
ds.load({params:{start:0,limit:10}});
grid.render();
]]>
//映射关系
reader: new Ext.data.XmlReader({
record: 'tbalarminfo',
id: 'id',
totalRecords:'countRow'
}, [
{name: 'id', mapping: 'ItemAttributes > id'},
'id','errorid','taskname','alarmtime','descr','matter','rating','status'
])
});
//创徏一个表格对?br />
var sm = new Ext.grid.CheckboxSelectionModel();
var cm = new Ext.grid.ColumnModel([
new Ext.grid.RowNumberer(),//自动行号
sm,//d的地?br />
{header: "id", dataIndex: 'id',hidden:true},
{header: "错误ID", width: 100, dataIndex: 'errorid'},
{header: "d名称", width: 100, dataIndex: 'taskname'},
{header: "旉", width: 100, dataIndex: 'alarmtime'},
{header: "报警描述", width: 150, dataIndex: 'descr'},
{header: "错误内容", width: 150, dataIndex: 'matter',hidden:true},
{header: "U别", width: 100, dataIndex: 'rating'},
{header: "状?, width: 100, dataIndex: 'status',renderer:function(value){
if (value == '0') {
return "<span style='color:red;font-weight:bold;'>未通知</span>";
} else if (value == '1') {
return "<span style='color:red;font-weight:bold;'>未处?lt;/span>";
}else if (value == '10') {
return "<span style='color:green;font-weight:bold;'>已处?lt;/span>";
}
}}
]);
cm.defaultSortable = true;
// create the grid
var grid = new Ext.grid.GridPanel({
el:'example-grid',
store: store,
cm: cm,
sm: sm,
width: 700,
height: 310,
fitToFrame: true,
title:'文g同步历史报警信息列表',
selModel: new Ext.grid.RowSelectionModel({singleSelect:false}),
bbar: new Ext.PagingToolbar({
pageSize: 20,
store: store,
displayInfo: true,
displayMsg: '昄W?{0} 条到 {1} 条记录,一?{2} ?,
emptyMsg: "没有记录"
})
});
grid.render();
store.load({ params : { start : 0, limit : 10 }});
//为gridd双击事g做弹出窗口处?br />
grid.addListener('rowdblclick',function(){
var records = grid.getSelectionModel().getSelections();
var stat = records[0].get("status");
id=records[0].get('id');
errorid=records[0].get('errorid');
errordescr=records[0].get('descr');
matter=records[0].get('matter');
if(stat!="10"){
if(!records.length){
alert("请选择要处理的报警信息");
}
else{
window.open ('ModifyFileAlarmStatById.jsp?id='+id+","+errorid+","+errordescr+","+matter,'newwindow', 'height=300, width=540, top=200, left=200, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no');
}
}else{
window.open ('ViewAlarmDisposenoticeById.jsp?id='+id+","+errorid+","+errordescr+","+matter,'newwindow', 'height=200, width=540, top=200, left=200, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no');
}
});
xml l合 extajax 分页 以及grid d监听Ҏ(gu)处理操作
后台 java 获得 start的v始条?nbsp;
数据库写 sql 查询相应的第几条到多条数的数据
]]>
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public final class CheckPic{
private static String REGEX;
private static String INPUT;
private static Pattern pattern;
private static Matcher matcher;
private static List PicList = new ArrayList();
private static List UsedList = new ArrayList();
public static void main(String[] args) {
REGEX="[a-z0-9A-Z.?_]*.(jpg|jpeg|gif|png)";
pattern = Pattern.compile(REGEX);
initTxt();//初始化存N面的文gQ?br />
System.out.println("面中出现的pic++++++++++++++++++++++++++++++++++++++++++++++++++");
Iterator it = PicList.iterator();
while(it.hasNext()){
System.out.println(it.next().toString());
}
File filenew = new File("pic");
checkused(filenew);//qo掉没有用到的囄
System.out.println("qo后有用的pic**************************************************");
Iterator itr =UsedList.iterator();
while(itr.hasNext())
System.out.println(itr.next().toString());
}
/* all.txt文g里存攄所有的面文g 如(.JSP .HTM {)all.txt可以作ؓ(f)一个参Cq来
* 对all.txt文gq行出始?br />
* */
private static void initTxt(){
BufferedReader brr=null;
try {
brr = new BufferedReader(new FileReader("all.txt"));
} catch (FileNotFoundException fnfe) {
System.out.println("Cannot locate input file1! " + fnfe.getMessage());
System.exit(0);
}
try {
INPUT = brr.readLine(); //d一行(每行存放的是一个页面文件 例如List.jsp ...Q?br />
while(INPUT!=null){
initResources(INPUT);
INPUT = brr.readLine();
}
brr.close();
} catch (IOException ioe) {
}
}
/*d每个面文g的内?br />
*
*/
private static void initResources(String txtname) {
BufferedReader br = null ;
try {
br = new BufferedReader(new FileReader(txtname));
} catch (FileNotFoundException fnfe) {
System.out.println("Cannot locate input file2! " + fnfe.getMessage()); //判断此文件是否存?br />
System.exit(0);
}
try {
INPUT = br.readLine();//d.jsp文g中的每一?br />
while(INPUT!=null){
processTest(INPUT);//Ҏ(gu)行进行分析看有没有用到图?br />
INPUT =br.readLine();
}
br.close();
} catch (IOException ioe) {
}
}
/*查页面中用到的图片,q把用到的图片存攑֜PicList里面Qƈ且消除掉重复使用的图片)
*/
private static void processTest(String Input) {
matcher = pattern.matcher(Input);
while (matcher.find()) {
System.out.println("I found the text \"" + matcher.group()
+ "\" starting at index " + matcher.start()
+ " and ending at index " + matcher.end() + "."); //囄出现的位|?br />
if(!PicList.contains(matcher.group())){
PicList.add(matcher.group());//判断此图片是否重复用,如果W一ơ用该图片就存放在PicList?br />
}
else
{
System.out.println("此图片已l存?);
}
}
}
/*判断囄库所在的文g多w的图片有那些是页面中用到的,有那些是没有用到?br />
* q且把用到的虑出来攑֜UsedList里面
*
*/
private static void checkused(File file){
if (file.isFile()) //如果是一个文件则q回Q?nbsp;
return;
else{
System.out.println("PIC库里的所有pic如下#######################################");
for(int i=0;i<file.list().length;i++){
System.out.println(file.list()[i]);
if(PicList.contains(file.list()[i])){
UsedList.add(file.list()[i]);
}
}
}
}
}
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl为数据库的SID
String user="test";
String password="test";
Connection conn= DriverManager.getConnection(url,user,password);
2?a style="font-size: 14px; color: #0000ff; text-decoration: none" target="_blank">DB2数据?/strong>
Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample";
//sampleZ的数据库?br />
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
3、Sql Server7.0/2000数据?/strong>
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";
//mydb为数据库
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
4、Sybase数据?/strong>
Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/myDB";
//myDBZ的数据库?br />
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);
5、Informix数据?/strong>
|
|
|
字符 |
转义字符 |
描述 |
& |
& |
?/span> |
< |
< |
于?/span> |
> |
> |
大于?/span> |
" |
" |
双引?/span> |
' |
' |
单引?/span> |
字符 |
转义字符 |
描述 |
& |
& |
?/span> |
< |
< |
于?/span> |
> |
> |
大于?/span> |
" |
" |
双引?/span> |
|
I格 |
|
© |
© |
版权W?/span> |
® |
® |
注册W?/span> |
Oracle不支持类g MySQL 中的 limit. 但你q是可以rownum来限制返回的l果集的行数.
如果你只希望q回前十行纪录,你可以这样写Q?/p>
SELECT * FROM table WHERE ROWNUM< 10;
但是下面的语句是不对的:
SELECT * FROM table WHERE ROWNUM >90 AND ROWNUM< 100;
q是因ؓ(f) Oracle 认ؓ(f)q个条g不成立,所以没有返回?/p>
你应该这样写Q?/p>
SELECT * FROM table WHERE ROWNUM< 101; minus SELECT * FROM table WHERE ROWNUM< 91; |
问题一Q如果你安q有一安厅,东西又贵又难吃,桌上q爬着蟑螂Q你会因为它很近很方便,׃而再、再而三地光临吗Q?
回答Q你一定会_q是什么烂问题Q谁那么W,花钱买罪受?
可同L(fng)情况换个场合Q自己或许就做类似的蠢事?
不少男女都曾l抱怨过他们的情人或配偶品性不端,三心二意Q不负责仅R明知在一h什么好的结果,怨恨已经比爱q多Q但?#8220;不知道ؓ(f)什?#8221;q是要和他搅和下去,分不了手?说穿了,只是Z不甘Qؓ(f)了习(fn)惯,q不也和光(f)厅一P
-做hQؓ(f)什么要q于执著Q!
问题二:如果你不心丢掉100块钱Q只知道它好像丢在某个你走过的地方,你会?00块钱的R费去把那100块找回来吗?
回答Q一个超U愚蠢的问题?
可是Q相似的事情却在人生中不断发生。做错了一件事Q明知自己有问题Q却怎么也不肯认错,反而花加倍的旉来找藉口Q让别h对自q印象大打折扣。被人骂了一句话Q却׃无数旉难过Q道理相同。ؓ(f)一件事情发火,不惜损h不利Ԍ不惜血本,不惜旉Q只为报复,不也一h聊?
失去一个h的感情,明知一切已无法挽回Q却q是那么伤心Q而且一伤心?yu)是好几q_q要借酒愁QŞ销骨立。其实这样一点用也没有,只是损失更多
-Q做人,q吗为难自己Q!
问题三:你会因ؓ(f)打开报纸发现每天都有车祸Q就不敢出门吗?
回答Q这是个什么烂问题Q当然不会,那叫因噎废食?
然而,有不h却曾_现在的离婚率那么高,让我都不敢谈恋爱了。说得还挺理所当然。也有不女人看到有关的诸多报道Q就对自q另一半忧心忡忡,q不也是cM的反应?所谓乐观,是得相信:虽然道\多艰险,我还是那个会q_q马路的人,只要我小心一点,不必x过马\?nbsp;
-做hQ先要相信自己?
问题四:你相信每个h随便都可以成功立业吗Q?/p>
回答Q当然不会相信?
但据观察Q有人L在听完成功h士绞脑汁的Q比如说Q多M,?l习(fn)之后Q问了另一个问题?那不是很难?
我们都想?分钟内学好英文,?分钟内解x有难题,N成功是那么容易的吗?改变当然是难的.成功只因不怕困难,所以才能出cL萃?
有一ơ坐在出UR上,听见司机看到自己前后都是高档车,兀自感叹:“唉,Z么别人那么有钱,我的p么难赚?”
我心血来潮Q问他:“你认Z上有什么钱是好赚的Q?#8221;他答不出来,q了半晌才说Q好像都是别人的钱比较好赚?
其实M一个成功者都是艰辛取得。我们实在不该抱怨命q?br />
-做hQ依靠自己!
问题五:你认为完全没有打q篮球的人,可以当很好的球教练吗?
回答Q当然不可能Q外行不可能领导内行?/p>
可是Q有许多人,Ҏ(gu)个行业完全不了解Q只听到那个行业?**Q就马上开起业来了?/p>
我看q对I着没有M口味、或Ҏ(gu)不在乎穿着的hQ梦惛_是开间服装店Q不知道?sh)脑怎么开机的人,却想在网上聊天,l果道听途说Q却不反省自己是否专业能力不I只抱怨时不我与?/p>
-做hQ量力而行?/p>
问题六:怼但不相同的问题:你是否认为,球教练不上球场,闭着眼睛也可以主g场完的胜利Q?br /> 回答Q有病啊Q当然是不可能的?/p>
可是却有不少朋友Q自己没有时间打理,却拼命投资去开咖啡馆,开厅Q开自己Ҏ(gu)不懂的公司,火烧屁股一h着把辛苦积攒的U蓄花掉Q去当一个稀里糊涂的投资人。亏的L比赚的多Q却觉得自己是因气不好,而不是想法出了问题?/p>
-做hQ记得反省自己?/p>
问题七:你宁可永q后(zhn),也不愿意试一试自p否{败ؓ(f)胜?
解答Q恐怕没有h会说Q?#8220;对,我就是这L(fng)孬种”吧?/p>
然而,我们却常常在不该打退堂鼓时拼命打退堂鼓Qؓ(f)了恐惧失败而不敢尝试成功?/p>
以关颖珊赢得2000q世界花h冰冠军时的精彩表Cؓ(f)例:她一心想赢得W一名,然而在最后一场比赛前Q她的ȝ分只排名W三位,在最后的自选曲目上,奚w择了突_而不是少出错。在4分钟的长曲中Q结合了最高难度的三周跻Iq且q大胆地q蟩了两ơ。她也可能会败得很难看,但是Ҏ(gu)竟成功了?/p>
她说Q?#8220;因ؓ(f)我不想等到失败,才后(zhn)自p有潜力没发挥?#8221;
一个中国伟人曾_胜利的希望和有利情况的恢复,往往产生于再坚持一下的努力之中?/p>
-Q做人,何妨放手一搏?/p>
问题八:你的旉无限Q长生不老,所以最惛_的事Q应该无限g期?
回答Q不Q傻瓜才会这栯为?/p>
然而我们却常说Q等我老了Q要ȝ怸界;{我退休,pd惛_的事情;{孩子长大了Q我可?#8230;…
我们都以己有无限的时间与_֊。其实我们可以一步一步实现理惻I不必在等待中徒耗生命。如果现在就能一步一步努力接q,我们׃会活了半生,却出现自己最不想看到的结局?br />
W二句话是:生命是一U过E?nbsp;
事情的结果尽重要,但是做事情的q程更加重要Q因为结果好了我们会更加快乐Q但q程使我们的生命充实。h的生命最后的l果一定是MQ我们不能因此说我们的生命没有意义。世界上很少有永恒。大学生谈恋爱,每天都在信誓旦旦地说我会׃一辈子Q这实际上是不真实的。统计数据表明,大学生谈恋爱?00寚w?90Ҏ(gu)后会分手Q最后结婚了的还有一半会d。你说爱情能永恒吗?所以最真实的说法是Q?#8220;我今天,此时此刻正在真心地爱着你?#8221;明天也许你会失恋Q失恋后我们会体验到失恋的痛苦。这U体验也是丰富你生命的一个过E?
注解Q生命本w其实是没有M意义的,只是你自p予你的生命一U你希望实现的意义,因此享受生命的过E就是一U意义所在?nbsp;
W三句话是:两点之间最短的距离q不一定是直线?nbsp;
在h与h的关pM及做事情的过E中Q我们很隄截了当就把事情做好。我们有旉要等待,有时需要合作,有时需要技巧。我们做事情会碰到很多困隑֒障碍Q有时候我们ƈ不一定要挺、硬Ԍ我们可以选择有困隄q去Q有障碍l过去,也许q样做事情更加顺利。大家想一惻I我们和别话还得想惛_句话更好听呢。尤其在中国q个比较复杂的社会中Q大家要学会惛_法谅解别人,要让得你q个人很成熟Q很不错Q你才能把事情做成?
注解Q如果你在考数学试题,一定要{两点之间直U段最短,如果你在走\Q从A到BQ明明可以直接过去,但所有h都不赎ͼ你最好别赎ͼ因ؓ(f)有陷阱。在中国办事情,直线性思维在很多地方要壁Q这是中国特色的中国处事方式?
W四句话是:只有知道如何停止的h才知道如何加快速度?nbsp;
我在滑雪的时候,最大的体会是停不下来。我刚开始学滑雪时没有请教练Q看着别h滑雪Q觉得很Ҏ(gu)Q不是从山滑到山下吗Q于是我I上滑雪板,哧溜一下就滑下MQ结果我从山滑到山下,实际上是滚到׃Q摔了很多个跟斗。我发现Ҏ(gu)׃知道怎么停止、怎么保持q。最后我反复l习(fn)怎么在雪C、斜坡上停下来。练了一个星期,我终于学会了在Q何坡上停止、滑行、再停止。这个时候我发现自׃滑雪了,敢从山剙速地往山坡下冲。因为我知道只要我想停,一转np停下来。只要你能停下来Q你׃会撞上树(wi)、撞上石头、撞上hQ你׃会被撞死。因此,只有知道如何停止的hQ才知道如何高速前q?nbsp;
注解Q用汽R来比喻,宝马可以?00公里Q奇瑞却只能?20公里Qؓ(f)什么?发动Z计不怸下,差距在刹车系l,上了200公里刹不了RQ呵呵,我的天!
W五句话是:攑ּ是一U智慧,~陷是一U恩惠?
当你拥有六个Ҏ(gu)的时候,千万不要把它们都吃掉Q因Z把六个苹果全都吃掉,你也只吃C六个Ҏ(gu)Q只吃到了一U味道,那就是苹果的味道。如果你把六个苹果中的五个拿出来l别人吃Q尽表面上你丢了五个苹果,但实际上你却得到了其他五个h的友情和好感。以后你q能得到更多Q当别h有了别的水果的时候,也一定会和你分nQ你会从q个人手里得C个橘子,那个人手里得C个梨Q最后你可能得C六种不同的水果,六种不同的味道,六种不同的颜Ԍ六个人的友谊?br />
Z定要学会用你拥有的东西去换取对你来说更加重要和丰富的东西。所以说Q放弃是一U智慧?