string用法

一、标记
标记(tokenizing)是从文本中提取具体内容的过程。

下面的代码从句子中提取单词,并把它们输出到控制台。

class mytokenizing
{
static void main(string[ ] args)
{
string mystring="i like this food,are you?";
char[] separators={ ,,,?,:,!};
int startpos=0;
int endpos=0;
do
{
endpos=mystring.indexofany(separators,startpos);
if ( endpos==-1 ) endpos=mystring.length;
if ( endpos!=startpos )
console.writeline(mystring.substring( startpos,(endpos-startpos)));
startpos=(endpos+1);
}while(startpos<mystring.length);
}
}
i
== 输出

like
this
food
are
you

二、颠倒字符串次序

class myreverse
{
static void main(string [] args)
{
string mystring="
你们好
";
char[] mychars=mystring.tochararray( );
array.reverse(mychars);
console.writeline(mystring);
console.writeline(mychars);
}
}
任何继承于array的类都能利用reverse( )方法为数组中的元素重新排序。


三、字符串的插入、删除和替换

示例文件test.txt为字符串的来源。下面代码以unicode格式读取文本。确保文件保存为读取时的格式。例如记事本允许将代码保存为unicode

aaaaaaaa,bbbbbbbb,cccccc
dddddddd,eeeeeeee,ffffff
gggggggg,hhhhhhhh,iiiiii
jjjjjjjj,kkkkkkkk,llllll
下面代码加载数据并处理数据的测试工具。测试结果发送给控制台。

class myprocessfile
{
static void main(string [] args)
{
const string myname="test.txt";
stream readline;
textwirter writeline;
stringbuilder sb;
readline=file.openread(myname);
writeline=console.out;
streamreader readlinesreader=new streamreader(readline,encoding.unicode);
readlinesreader.basestream.seek(0,seekorigin.begin);
while(readlinesreader.peek()>-1)
{
sb=new stringbuilder(readlinesreader.readline());
//
插入字符串操作语句如:
sb.append(",123");
console.writeline(sb.tostring());
}
}
}

在结尾添加一列内容:

//displays aaaaaaaa,bbbbbbbb,cccccc,xxxxx
//......
sb.append(",xxxxx");

第一列可以使用下面的代码删除:

//displays bbbbbbbb,cccccc
//......
sb.remove(0,sb.tostring().indexof(,)+1);

替换分隔符:

//aaaaaaaa+bbbbbbbb+cccccc
sb.replace(,,+);

添加行号(linenumber已经在前面某处声明过为前提)

sb.insert(0,linenumber.tostring("000 "));
linenumber++;

//displays
//000 aaaaaaaa,bbbbbbbb,cccccc
//001 dddddddd,eeeeeeee,ffffff
//002 gggggggg,hhhhhhhh,iiiiii
//003 jjjjjjjj,kkkkkkkk,llllll

13:16 |
评论
(0)

2004
711
#

字符串操作学习笔记

字符串操作




--------------------------------------------------------------------------------
1
、从字符串中提取子串

stringbuilder
类没有支持子串的方法,因此必须用string类来提取。

string mystring="my name is ynn.";
//displays "name is ynn."
console.writeline(mystring.substring( 3 ));
//displays "ynn"
console.writeline(mystring.substring( 11,3 ));

2
、比较字符串

string
类有四种方法:compare( )compareto( )compareordinal( )equals( )

compare( )
方法是compareto( )方法的静态版本。只要使用运算符,就会调用equals( )方法,的以equals( )方法与是等价的。compareordinal( )方法对两个字符串比较不考本地语言与文件。

示例:

int result;
bool bresult;
s1="aaaa";
s2="bbbb";
//compare( )method
//result
值为“0”表示等,小于零表示 s1 < s2,大于零表示
s1 > s2
result=string.compare(s1,s2);
result=s1.compareto( s2 );
result=string.compareordinal(s1,s2);
bresult=s1.equals( s2 );
bresult=string.equals( s1,s2 );
一个例外情况是,两个字符串都是内置的,并相等,静态方法要快得多。


3
、字符串格式化


3.1
格式化数字

格式字符说明和关联属性




--------------------------------------------------------------------------------
c
c 货币格式。

d
d 十进制格式。

e
e 科学计数(指数)格式。

f
f 固定点格式。

g
g 常规格式。

n
n 数字格式。

r
r 往返格式,确保将已转换成字符串的数字转换回数字时具有与原数字相同的值。

x
x 十六进制格式。


--------------------------------------------------------------------------------
double val=math.pi;
console.writeline(val.tostring( )); //displays 3.14159265358979
console.writeline(val.tostring("e"));//displays 3.141593e+000
console.writeline(val.tostring("f3");//displays 3.142
int val=65535;
console.writeline(val.tostring("x")); //displays ffff
console.writeline(val.tostring("x")); //displays ffff
single val=0.123f;
console.writeline(val.tostring("p")); //displays 12.30 %
console.writeline(val.tostring("p1")); //displays 12.3 %
默认格式化会在数字和百分号之间放入一个空格。定制方法如下:

其中numberformatinfo类是system.globalization命名空间的一个成员,因此该命名空间必须导入到程序中。

single val=0.123f;
object myobj=numberformatinfo.currentinfo.clone( ) as numberformatinfo;
numberformatinfo myformat=myobj as numberformatinfo;
myformat.percentpositivepattern=1;
console.writeline(val.tostring("p",myformat)); //displays 12.30%;
console.writeline(val.tostring("p1",myformat)); //displays 12.3%;
格式化具有很大的灵活性。下面的例子演示一个没有意义的货币结构:

double val=1234567.89;
int [] groupsize={2,1,3};
object myobj=numberformatinfo.currentinfo.clone( );
numberformatinfo mycurrency=myobj as numberformatinfo;
mycurrency.currencysymbol="#"; //
符号

mycurrency.currencydecimalseparator=":"; //
小数点

mycurrency.currencygroupseparator="_"; //
分隔符

mycurrency.currencygroupsizes=groupsize;
//
输出 
#1_234_5_67:89
console.writeline(val.tostring("c",mycurrency));

3.2
格式化日期

输出形式取决于用户计算机的文化设置。

using system;
using system.globalization;
public class mainclass
{
  
public static void main(string[] args)
  
{
datetime dt = datetime.now;
string[] format = {"d","d","f","f","g","g","m","r","s","t", "t","u", "u","y","dddd, mmmm dd yyyy","ddd, mmm d \"\"yy","dddd, mmmm dd","m/yy","dd-mm-yy",};
string date;
for (int i = 0; i < format.length; i++)
{
date = dt.tostring(format[i], datetimeformatinfo.invariantinfo);
console.writeline(string.concat(format[i], " :" , date));
}
}
}
d :07/11/2004 <=======
输出

d :sunday, 11 july 2004
f :sunday, 11 july 2004 10:52
f :sunday, 11 july 2004 10:52:36
g :07/11/2004 10:52
g :07/11/2004 10:52:36
m :july 11
r :sun, 11 jul 2004 10:52:36 gmt
s :2004-07-11t10:52:36
t :10:52
t :10:52:36
u :2004-07-11 10:52:36z
u :sunday, 11 july 2004 02:52:36
y :2004 july
dddd, mmmm dd yyyy :sunday, july 11 2004
ddd, mmm d ""yy :sun, jul 11 04
dddd, mmmm dd :sunday, july 11
m/yy :7/04
dd-mm-yy :11-07-04

3.3
格式化枚举

enum classmen
{
ynn=1,
yly=2,
css=3,
c++=4
}
获取枚举字符串信息如下:

classmen myclassmen=classmen.yly;
console.writeline(myclassmen.tostring( )); //displays yly
console.writeline(myclassmen.tostring("d")); //displays 2
从系统枚举中获取文本人信息如下:

dayofweek day=dayofweek.friday;
//displays "day is friday"
console.writeline(string.format("day is {0:g}",day));
格式化字符串“ g ”把枚举显示为一个字符串。


11:56 |
评论
(0)

2004
78
#

stringbuilder
类学习笔记

  string类的不可改变性使它更像一个值类型而不是一个引用类型。其副作用是每次执行字符操作时,都会创建一个新的string对象。stringbuilder类解决了对字符串进行重复修改的过程中创建大量对象的问题。


stringbuilder
类的一些属性与方法




--------------------------------------------------------------------------------

length
 属性并不是只读的。

stringbuilder sb=new stringbuilder("i live the language");
console.writeline(sb.tostring( ));
sb.length = 6;
//displays "i live"
console.writeline(sb.tostring( ));

capacity
属性

描述:当前为实例分配的字符数量。默认容量是16,如果将一个字符串作为参数提供给构造函数,容量以最接近 2的幂的值。


maxcapacity
属性

描述:这个实例中可以被分配的字符最大数量。


append( )
 方法

描述:追加给定值的字符串表示。

stringbuilder sb=new stringbuilder( );
console.writeline( sb.capacity+"\t"+sb.length );
sb.append ( a , 17 )
console.writeline( sb.capacity+"\t"+sb.length );
16 0 <==
输出

32 17

ensurecapacity( int capacity )
方法

描述:如果当前容量小于指定容量,内存分配会增加内存空间以达到指定容量。


replace( char oldchar,char newchar )
方法

描述:用newchar替换oldchar


replace( string oldstring,string newstring )
方法

描述:用newstring替换oldstring


replace( char oldchar,char newchar,int startpos,int count )
方法

描述:从startposcount-1之间用newchar替换oldchar


replace( string oldstring,string newstring,int startpos,int count )
方法

描述:从startposcount-1之间用newstring替换oldstring


tostring( )
方法

stringbuilder sb=new stringbuilder( "i live this game" );
string s1=sb.tostring( ); //displays "i live this game"
string s2=sb.tostring(3,4); //displays "live"
在这里第二个tostring( )方法调用了string类的substring( )方法

public string tostring( int startindex,int length )
{
return m_stringvalue.substring( startindex,length );
}

10:28 |
评论
(0)

2004
77
#

string
类学习笔记

一、string 类的常用公共成员




--------------------------------------------------------------------------------

compare(string s1,string s2)
静态方法

功能:区分大小写比较。


compare(string s1,string s2,bool ignorecase)
静态方法

功能:ignorecasetrue,不区分大小写比较。


compareto(string s)
实例方法

功能:对给定字符串与实例字符串执行一次区分大小写与文化信息比较。


copy(string s)
静态方法

功能:返回一个与给定字符串同值的新的字符串。


copyto(int surceindex,char[ ] destination,int destindex,int count)
实例方法功能:此实例中的指定位置复制到 unicode字符数组中的指定位置。

参数:

sourceindex
:此实例中的字符位置。

destination
unicode字符的数组。

destindex
destination中的数组元素。
count
:此实例中要复制到 destination的字符数。
例程:
using system;
public class copytotest {
public static void main() {
string strsource = "changed";
char [] destination = { t, h, e, , i, n, i, t, i, a, l, , a, r, r, a, y };
console.writeline( destination );
strsource.copyto ( 0, destination, 4, strsource.length );
console.writeline( destination );
strsource = "a different string";
strsource.copyto ( 2, destination, 3, 9 );
console.writeline( destination ); }
}
输出:
the initial array
the changed array
thedifferentarray

endswith(string s)
功能:如果实例字符串是以给定的字符串结束,就返回true

equals(string s)
功能:如果实例字符串与给定的对象具有相同的值,就返回true

format(iformatprovider provider,string format,paramarray args)
功能:format的一个副本,其中格式项已替换为 args中相应 object实例的 string等效项。
参数
provider :
一个 iformatprovider,它提供区域性特定的格式设置信息。
format :
包含零个或多个格式项。
args
:包含零个或多个要格式化的对象的 object数组。
例如:
string myname = "fred";
string.format("name = {0}, hours = {1:hh}", myname, datetime.now);
固定文本是“name =”“, hours =”,格式项是“{0}”“{1:hh}”,值为 myname datetime.now

replace(string oldstring,string newstring)
功能:在实例字符串中用newstring替换所有oldstring


split(char[] separator,int count)
参数
separator
:分隔此实例中子字符串的 unicode字符数组、不包含分隔符的空数组或空引用。
count
:要返回的最大数组元素数。
例如:
string delimstr = " ,.:";
char [] delimiter = delimstr.tochararray();
string words = "one two,three:four.";
string [] split = null;
split = words.split(delimiter, 4);
foreach (string s in split)
{
console.writeline("-{0}-", s);
}
one <==
输出
two
three
four.

substring(int startpos,int length)
功能:从指定位置开始返回一个指定长度的子串。

tostring( )
功能:返回一个对实例字符的引用。
tostring(iformatprovider format)
功能:返回一个对实例字符串的引用。

13:31 |
评论
(0)

2004
76
#

正则表达式学习笔记(1)
一、system.text.regularexpression命名空间
1
regex类可以用来创建正则表达式,还提供了许多方法。
如:regex.replace(string input,string pattern,string replacement);
-------regexoption
枚举
ignorecase
忽略大小写。默认情况区分大小写
righttoleft
从右到左查找输入字符串。
none
不设定标志。
miltiline
指定^$可以匹配行的开头和结尾,以及字符串的开头和结尾。
singleline
规定特殊字符“.”匹配任一字符。换行符除外。
例:regexoptions.ignorecase
regex.ismatch(mystring,"ywsm",regexoptions.ignorecase |regexoptions.righttoleft):
-------(
两个主要的)类构造函数
regex(string pattern);
regex(string pattern , regexoption options);
例:匹配ywsm:
static void main(string[] args)
{ regex myregex=new regex("ywsm");
system.console.writeline(myregex.ismatch("the first three letters of "+"the alphabet are ywsm")); }
输出:true如需设置区分大小写可用
regex myregex=new regex("ywsm",regexoption.ignorecase);
-------ismatch( )
方法
该方法可以测试字符串,看它是否匹配正则表达式的模式。如果发现了一次匹配,返回true,否则为falseismatch( )有一个静态的重载方法,使用它时可以无需显式创建一个regex对象。
重载形式:
public bool regex.ismatch(string input );
public bool regex.ismatch(string input,int startat);
public static bool regex.ismatch(string input,string pattern);
public static bool regex.ismatch(string input,string pattern,regexoption options);
input:
指定了包含将检索的文本的字符串。
sartat:
指定了搜索的起始字符位置。
pttern:
指定将匹配的样式。
options:
匹配行为的选项。
例:string inputstring="welcome to the ywicc,ywsmxy!";
if ( regex.ismatch( inputstring,"ywicc",regexoptions.ignorecase) )
console.writeline("match found");
else
console.writeline(" no match found");
------replace( )
方法
用指定的字符串代替一个匹配模式。
---
基本方法有:
public static string regex.replace(string input,string pattern,string replacement);
public static string regex.replace(string input,string pattern,string replacement,regexoption options);
例:用"aaa"替换"bbb"的所有实例代码:
string inputstring="welcome to the aaa!";
inputstring=regex.replace(inputstring,"bbb","aaa");
console.writeline(inputstring);
----
非静态方法,可以指定替换次数的最大值以及开始下标:
public string replace(string input,string replacement);
public string replace(string input,string replacement,int count);
public string replace(string input,string replacement,int count,int startat);
例:使用xxx替换456之后的123,最多替换两次,代码如下:
string inputstring="123,456,123,123,123,789,333";
regex regexp=new regex("123");
inputstring=regexp.replace(inputstring,"xxx",2,4)
console.writeline(inputstring);
输出:123,456,xxx,xxx,123,789,333
-------split( )
方法
在每次发现匹配的位置拆分字符串。返回一个字符串数组。
using system;
using system.text;
using system.text.regularexpressions;
using system.windows.forms;
class mysplit
{
static void main(string[ ] args)
{
string inputstring="123,456,789,ads";
string[ ] splitresults;
splitresults=regex.split(inputstring,",");
stringbuilder resultsstring=new stringbuilder(32);
foreach(string stringelement in splitresults)
{
resultsstring.append(stringelement+"\n");
}
messagebox.show(resultsstring.tostring( ));
}
}

123 <==
结果
456
789
ads

 

String.IndexOf
String.IndexOf 方法 (Char, Int32, Int32)
报告指定字符在此实例中的第一个匹配项的索引。搜索从指定字符位置开始,并检查指定数量的字符位置。
String.IndexOf(value, startIndex, count)

参数
value:要查找的 Unicode 字符。
startIndex:搜索起始位置。
count:要检查的字符位置数。
返回值(Int32):
如果找到该字符,则为 value 的索引位置;否则如果未找到,则为 -1。


示例:
string str = "深圳市盈基实业有限公司国际通邓事文*深圳市盈基实业有限公司国际通邓事文";
Label1.Text = str.IndexOf("中国").ToString();//返回 -1
Label1.Text = str.IndexOf("盈基").ToString();//返回 3
Label1.Text = str.IndexOf("盈基",10).ToString();//返回21 说明:这是从第10个字符开始查起。
Label1.Text = str.IndexOf("邓",15,10).ToString();//返回 -1
Label1.Text = str.IndexOf("邓",15,20).ToString();//返回 -32 说明:从第15个字符开始查找,要查找的范围是从第15个字符开始后20个字符,即从第15-35个字符中查找。
String.LastIndexOf
String.LastIndexOf 方法
报告指定的 Unicode 字符或 String 在此实例中的最后一个匹配项的索引位置。

名称说明 
String.LastIndexOf (Char)报告指定 Unicode 字符在此实例中的最后一个匹配项的索引位置。
String.LastIndexOf (String)报告指定的 String 在此实例内的最后一个匹配项的索引位置。
String.LastIndexOf (Char, Int32)报告指定 Unicode 字符在此实例中的最后一个匹配项的索引位置。该搜索从指定字符位置开始。
String.LastIndexOf (String, Int32)报告指定的 String 在此实例内的最后一个匹配项的索引位置。该搜索从指定字符位置开始。
String.LastIndexOf (String, StringComparison)报告指定字符串在当前 String 对象中最后一个匹配项的索引。一个参数指定要用于指定字符串的搜索类型。
String.LastIndexOf (Char, Int32, Int32)报告指定的 Unicode 字符在此实例内的子字符串中的最后一个匹配项的索引位置。搜索从指定字符位置开始,并检查指定数量的字符位置。
String.LastIndexOf (String, Int32, Int32)报告指定的 String 在此实例内的最后一个匹配项的索引位置。搜索从指定字符位置开始,并检查指定数量的字符位置。
String.LastIndexOf (String, Int32, StringComparison)报告指定字符串在当前 String 对象中最后一个匹配项的索引。参数指定当前字符串中的起始搜索位置,以及要用于指定字符串的搜索类型。
String.LastIndexOf (String, Int32, Int32, StringComparison)报告指定的 String 对象在此实例内的最后一个匹配项的索引位置。参数指定当前字符串中的起始搜索位置、要搜索的当前字符串中的字符数量,以及要用于指定字符串的搜索类型。


示例:
string str = "深圳市盈基实业有限公司国际通邓事文*深圳市盈基实业有限公司国际通邓事文";
Label1.Text = str.LastIndexOf("邓文").ToString();//返回-1
Label1.Text = str.LastIndexOf("邓").ToString();//返回32

Label1.Text = str.LastIndexOf("邓",8).ToString();//返回-1
Label1.Text = str.LastIndexOf("邓",20).ToString();//返回14
Label1.Text = str.LastIndexOf("邓",33).ToString();//返回32
说明:在指定的范围内查找字符,这个范围是上面的输入的参数,理解为,从索引0开始到指定的数值位置范围内查找最后一个匹配的的字符串的位置。示例中,0-8中没有“邓”字,所以返回-1,0-20范围中,有一个“邓”字在索引14位置上,0-33范围中有两个“邓”字,因为LastIndexOf是返回最后一个匹配项索引位置,所以返32,而不是14。
String.Substring
String.Substring 方法
从此实例检索子字符串。
名称说明
String.Substring (Int32)从此实例检索子字符串。子字符串从指定的字符位置开始。
String.Substring (Int32, Int32)从此实例检索子字符串。子字符串从指定的字符位置开始且具有指定的长度。


示例:
string str = "深圳市盈基实业有限公司国际通邓事文*深圳市盈基实业有限公司国际通邓事文";
Label1.Text = str.Substring(11);//返回 “国际通邓事文*深圳市盈基实业有限公司国际通邓事文”
Label1.Text = str.Substring(11,7);//返回 “国际通邓事文*”

总结一下:
IndexOf、LastIndexOf都是返回一个位置,是个整数值;找不到都返回-1;
IndexOf是从左向右查,LastIndexOf是从右向左查,不管是IndexOf还是LastIndexOf,索引序列都是从左到右的(起始值是0)
Substring是字符串截取,返回值是一个截取后的字符串。

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值