substring的作用,threadlocal作用
这篇文章给大家聊聊关于substring的作用,以及threadlocal作用对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。
java中一些字符串函数的作用
java中的字符串也是一连串的字符。但是与许多其他的计算机语言将字符串作为字符数组处理不同,Java将字符串作为String类型对象来处理。将字符串作为内置的对象处理允许Java提供十分丰富的功能特性以方便处理字符串。下面是一些使用频率比较高的函数及其相关说明。
String相关函数
1)substring()
它有两种形式,第一种是:String substring(int startIndex)
第二种是:String substring(int startIndex,int endIndex)
2)concat()连接两个字符串
例:String s="Welcome to";
String t=s.concat("AnHui");
3)replace()替换
它有两种形式,第一种形式用一个字符在调用字符串中所有出现某个字符的地方进行替换,形式如下:
String replace(char original,char replacement)
例如:String s=”Hello”.replace(’l',’w');
第二种形式是用一个字符序列替换另一个字符序列,形式如下:
String replace(CharSequence original,CharSequence replacement)
4)trim()去掉起始和结尾的空格
5)valueOf()转换为字符串
6)toLowerCase()转换为小写
7)toUpperCase()转换为大写
8)length()取得字符串的长度
例:char chars[]={’a',’b’.’c'};
String s=new String(chars);
int len=s.length();
9)charAt()截取一个字符
例:char ch;
ch=”abc”.charAt(1);
返回值为’b’
10)getChars()截取多个字符
void getChars(int sourceStart,int sourceEnd,char target[],int targetStart)
sourceStart指定了子串开始字符的下标
sourceEnd指定了子串结束后的下一个字符的下标。因此,子串包含从sourceStart到sourceEnd-1的字符。
target指定接收字符的数组
targetStart target中开始复制子串的下标值
例:String s=”this is a demo of the getChars method.”;
char buf[]=new char[20];
s.getChars(10,14,buf,0);
11)getBytes()
替代getChars()的一种方法是将字符存储在字节数组中,该方法即getBytes()
例:
String s=“Hello!你好!”;
Java字符串函数
java中的字符串也是一连串的字符。但是与许多其他的计算机语言将字符串作为字符数组处理不同,Java将字符串作为String类型对象来处理。将字符串作为内置的对象处理允许Java提供十分丰富的功能特性以方便处理字符串。下面是一些使用频率比较高的函数及其相关说明。
String相关函数
1)substring()
它有两种形式,第一种是:String substring(int startIndex)
第二种是:String substring(int startIndex,int endIndex)
2)concat()连接两个字符串
例:String s="Welcome to";
String t=s.concat("AnHui");
3)replace()替换
它有两种形式,第一种形式用一个字符在调用字符串中所有出现某个字符的地方进行替换,形式如下:
String replace(char original,char replacement)
例如:String s=”Hello”.replace(’l',’w');
第二种形式是用一个字符序列替换另一个字符序列,形式如下:
String replace(CharSequence original,CharSequence replacement)
4)trim()去掉起始和结尾的空格
5)valueOf()转换为字符串
6)toLowerCase()转换为小写
7)toUpperCase()转换为大写
8)length()取得字符串的长度
例:char chars[]={’a',’b’.’c'};
String s=new String(chars);
int len=s.length();
9)charAt()截取一个字符
例:char ch;
ch=”abc”.charAt(1);
返回值为’b’
10)getChars()截取多个字符
void getChars(int sourceStart,int sourceEnd,char target[],int targetStart)
sourceStart指定了子串开始字符的下标
sourceEnd指定了子串结束后的下一个字符的下标。因此,子串包含从sourceStart到sourceEnd-1的字符。
target指定接收字符的数组
targetStart target中开始复制子串的下标值
例:String s=”this is a demo of the getChars method.”;
char buf[]=new char[20];
s.getChars(10,14,buf,0);
11)getBytes()
替代getChars()的一种方法是将字符存储在字节数组中,该方法即getBytes()
例:
String s=“Hello!你好!”;
byte[] bytes= s.getBytes();
12)toCharArray()
例:
String s=“Hello!你好!”;
char[] ss= s.toCharArray();
13)equals()和equalsIgnoreCase()比较两个字符串
14)regionMatches()用于比较一个字符串中特定区域与另一特定区域,它有一个重载的形式允许在比较中忽略大小写。
boolean regionMatches(int startIndex,String str2,int str2StartIndex,int numChars)
boolean regionMatches(boolean ignoreCase,int startIndex,String
str2,int str2StartIndex,int numChars)
15)startsWith()和endsWith()
startsWith()方法决定是否以特定字符串开始
endWith()方法决定是否以特定字符串结束
16)equals()和==
equals()方法比较字符串对象中的字符
==运算符比较两个对象是否引用同一实例。
例:String s1=”Hello”;
String s2=new String(s1);
s1.eauals(s2);//true
s1==s2;//false
17)compareTo()和compareToIgnoreCase()比较字符串
18)indexOf()和lastIndexOf()
indexOf()查找字符或者子串第一次出现的地方。
lastIndexOf()查找字符或者子串是后一次出现的地方。
19)trim去空格函数
例: String t1=" abc de";
System.out.println(t1.trim());//去掉开头和结尾的空格“abc de”
20)split字符串分割
String y="abc,de,fg,hi,jk";
String[] y1= y.split(",");//截取字符串所有","字符
for(int i= 0; i< y1.length; i++){
System.out.print(y1[i]);//输出结果abcdefghijk
}
21)append添加或插入函数
StringBuffer zz1= new StringBuffer(z1);// append插入字符
zz1.append('|').append("hijk").append('/').append("lmn").append("opq");
System.out.println();
System.out.print(zz1);//输出:abcdefg|hijk/lmnopq
StringBuffer构造函数
StringBuffer定义了三个构造函数:
StringBuffer()
StringBuffer(int size)
StringBuffer(String str)
StringBuffer(CharSequence chars)
下面是StringBuffer相关的函数:
1)length()和capacity()
一个StringBuffer当前长度可通过length()方法得到,而整个可分配空间通过capacity()方法得到。
2)ensureCapacity()设置缓冲区的大小
void ensureCapacity(int capacity)
3)setLength()设置缓冲区的长度
void setLength(int len)
4)charAt()和setCharAt()
char charAt(int where)
void setCharAt(int where,char ch)
5)getChars()
void getChars(int sourceStart,int sourceEnd,char target[],int targetStart)
6)append()可把任何类型数据的字符串表示连接到调用的StringBuffer对象的末尾。
例:int a=42;
StringBuffer sb=new StringBuffer(40);
String s=sb.append(”a=”).append(a).append(”!”).toString();
6)insert()插入字符串
StringBuffer insert(int index,String str)
StringBuffer insert(int index,char ch)
StringBuffer insert(int index,Object obj)
7)index指定将字符串插入到StringBuffer对象中的位置的下标。
8)reverse()颠倒StringBuffer对象中的字符
StringBuffer reverse()
9)delete()和deleteCharAt()删除字符
StringBuffer delete(int startIndex,int endIndex)
StringBuffer deleteCharAt(int loc)
10)replace()替换
StringBuffer replace(int startIndex,int endIndex,String str)
11)substring()截取子串
String substring(int startIndex)
String substring(int startIndex,int endIndex)
sql server 中的函数mid有什么作用
从借助浏览器实现的数据库查询功能到内容丰富的扩展标记语言(xml)支持特性均可有力地证明,sql
server
2000无谓为全面支持web功能的数据库解决方案。与此同时,sql
server
2000还在可伸缩性与可靠性方面保持着多项基准测试纪录,而这两方面特性又都是企业数据库系统在激烈市场竞争中克敌致胜的关键所在。无论以应用程序开发速度还是以事务处理运行速度来衡量,sql
server
2000都堪称最为快捷的数据库系统,而这恰恰是该产品成为灵活企业首选解决方案的原因所在。
??通过
web
轻松访问数据。有了
sql
server
2000,您可以使用
http
来向数据库发送查询、对数据库中存储的文档执行全文搜索、以及通过
web
进行自然语言查询。
??
强大而灵活的基于
web
的分析。sql
server
2000
分析服务功能被扩展到了
internet。您可以通过
web
浏览器来访问和控制多维数据。
高度的可伸缩性和可靠性
??
使用
sql
server
2000
可以获得非凡的可伸缩性和可靠性。通过向上伸缩和向外扩展的能力,sql
server
满足了苛刻的电子商务和企业应用程序要求。
??向上伸缩。sql
server
2000
利用了对称多处理器
(smp)
系统。sql
server
enterprise
edition
最多可以使用
32
个处理器和
64
gb
ram。
??
向外扩展。向外扩展可以将数据库和数据负载分配给多台服务器。
??
可用性。通过增强的故障转移群集、日志传送和新增的备份策略,sql
server
2000
达到了最大的可用性。
最快的进入市场时间
??
sql
server
2000
是
microsoft
.net
enterprise
server
的数据管理与分析中枢。sql
server
2000
包括加速从概念到最后交付开发过程的工具。
??集成和可扩展的分析服务。有了
sql
server
2000,您可以建立带有集成工具的端到端分析解决方案,从数据创造价值。此外,还可以根据分析结果自动驱动商业过程以及从最复杂的计算灵活地检索自定义结果集。
??
快速开发、调试和数据转换。sql
server
2000
带有交互式调节和调试查询、从任何数据源快速移动和转化数据、以及按
transact-sql
方式定义和使用函数等功能。您可以从任意
visual
studio
工具以可视化方式设计和编写数据库应用程序。
??
简化的管理和调节。使用
sql
server
2000,您可以很容易地在企业资源旁边集中管理数据库。可以在保持联机的同时轻松地在计算机间或实例间移动和复制数据库。
Oracle中Blob和Clob的作用
Blob是指二进制大对象也就是英文Binary Large Object的所写,而Clob是指大字符对象也就是英文Character Large Object的所写。由此可见这辆个类型都是用来存储大量数据而设计的,其中BLOB是用来存储大量二进制数据的;CLOB用来存储大量文本数据。
那么有人肯定要问既然已经有VARCHAR和VARBINARY两中类型,为什么还要再使用另外的两种类型呢?其实问题很简单,VARCHAR和VARBINARY两种类型是有自己的局限性的。首先说这两种类型的长度还是有限的不可以超过一定的限额,以VARCHAR再ORA中为例长度不可以超过4000;那么有人又要问了,LONGVARCHAR类型作为数据库中的一种存储字符的类型可以满足要求,存储很长的字符,那为什么非要出现CLOB类型呢?其实如果你用过LONGVARCHAR类型就不难发现,该类型的一个重要缺陷就是不可以使用LIKE这样的条件检索。(稍候将介绍在CLOB中如何实现类似LIKE的模糊查找)另外除了上述的问题外,还又一个问题,就是在数据库中VARCHAR和VARBINARY的存取是将全部内容从全部读取或写入,对于100K或者说更大数据来说这样的读写方式,远不如用流进行读写来得更现实一些。
在JDBC中有两个接口对应数据库中的BLOB和CLOB类型,java.sql.Blob和java.sql.Clob。和你平常使用数据库一样你可以直接通过ResultSet.getBlob()方法来获取该接口的对象。与平时的查找唯一不同的是得到Blob或Clob的对象后,我们并没有得到任何数据,但是我们可以这两个接口中的方法得到数据
例如:
Blob b=resultSet.getBlob(1);
InputStream bin=b.getBinaryStryeam();
Clob c=resultSet.getClob(2);
Reader cReader=c.getCharacterStream():
关于Clob类型的读取可以使用更直接的方法,就是直接通过ResultSet.getCharacterStream();方法获得字符流,但该方法并不安全,所以建议还是使用上面例子的方法获取Reader。
另外还有一种获取方法,不使用数据流,而是使用数据块。
例如
Blob b=resultSet.getBlob(1);
byte data=b.getByte(0,b.length());
Clob c=resultSet.getClob(2);
String str=c.getSubString(0,c.length()):
在这里我要说明一下,这个方法其实并不安全,如果你很细心的话,那很容易就能发现getByte()和getSubString()两个方法中的第二个参数都是int类型的,而BLOB和CLOB是用来存储大量数据的。而且Bolb.length()和Clob.length()的返回值都是 long类型的,所以很不安全。这里不建议使用。但为什么要在这里提到这个方法呢?稍候告诉你答案,这里你需要记住使用数据块是一种方法。
在存储的时候也同样的在PreparedStatement和CallableStatememt中,以参数的形式使用setBlob()和 setClob方法把Blob和Clob对象作为参数传递给SQL。这听起来似乎很简单对吧,但是并非我们想象的这样,很不幸由于这两个类型的特殊,JDBC并没有提供独立于数据库驱动的Blob和Clob建立对象。因此需要自己编写与驱动有关的代码,但这样又牵掣到移植性。怎样才是解决办法呢?这就要用到前面说过的思想了使用数据块进行写操作。同样用PreparedStatement和CallableStatememt类,但参数的设置可以换为setAsciiStream、setBinaryStream、setCharacterStream、setObject(当然前3个同样存在长度的问题)
下面给大家个例子以方便大家理解
public void insertFile(File f) throws Exception{
FileInputStream fis=new FileInputStream(f,Connection conn);
byte[] buffer=new byte[1024];
data=null;
int sept=0;int len=0;
while((sept=fis.read(buffer))!=-1){
if(data==null){
len=sept;
data=buffer;
}else{
byte[] temp;
int tempLength;
tempLength=len+sept;
temp=new byte[tempLength];
System.arraycopy(data,0,temp,0,len);
System.arraycopy(buffer,0,temp,len,sept);
data=temp;
len=tempLength;
}
if(len!=data.length()){
byte temp=new byte[len];
System.arraycopy(data,0,temp,0,len);
data=temp;
}
}
String sql="insert into fileData(filename,blobData) value(?,?)";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1,f.getName());
ps.setObject(2,data);
ps.executeUpdate();
}
最后由于刚刚说过Clob类型读取字符的长度问题,这里再给大家一段代码,希望对你有帮助
public static String getClobString(ResultSet rs, int col){
try{
Clob c=resultSet.getClob(2);
Reader reader=c.getCharacterStream():
if(reader== null){
return null;
}
StringBuffer sb= new StringBuffer();
char[] charbuf= new char[4096];
for(int i= reader.read(charbuf); i> 0; i= reader.read(charbuf)){
sb.append(charbuf, 0, i);
}
return sb.toString();
} catch(Exception e){
return"";
}
}
另外似乎前面还提到过LIKE检索的问题。LONGVARCHAR类型中不可以用LIKE查找(至少ORA中不可以使用,其他的数据库我没有试过),在ORA中我们可以使用这样一个函数dbms_lob.instr来代替LIKE来个例子吧
select docid,dat0 from text where dbms_lob.instr(dat0,'魏',1,1)>0
在text表中有两个字段docid用来放文档编号dat0为clob类型存放文章内容;这句话的意思就是检索第一条dat0中出现第一次"魏"字的数据。听起来这个检索的数据有点象google的“手气不错”
好了,文章到这里就结束啦,如果本次分享的substring的作用和threadlocal作用问题对您有所帮助,还望关注下本站哦!