面向对象基础(class0425)字符串与集合
常用类库
学习.net就是学习它的无数个类库怎么用,先看两个简单的
String 字符串,不可变特性。字符串可以看成字符数组
属性 Length
方法
IsNullOrEmpty() 静态方法
ToCharArray()
ToLower()
string不可变性
ToUpper()
Equals() 忽略大小写的比较
Join() 静态方法
Format () 静态方法
IndexOf()
LastIndexOf()
Substring()
Split()
Replace() Trim() Contains()
字符串的处理练习1
课上练习1:接收用户输入的字符串,将其中的字符以与输入相反的顺序输出。"abc"→"cba"
课上练习2:接收用户输入的一句英文,将其中的单词以反序输出。 “I love you"→“uoy evol I"
课上练习3:”2012年12月21日”从日期字符串中把年月日分别取出来,打印到控制台
课上练习4:把csv文件中的联系人姓名和电话显示出来。简单模拟csv文件,csv文件就是使用,分割数据的文本
"张","三","";
"李","四","";
"王","五","";
"赵","六",""
练习5:“192.168.10.5[port=21,type=ftp]”,这个字符串表示IP地址为192.168.10.5的服务器的21端口提供的是ftp服务,其中如果“,type=ftp”部分被省略,则默认为http服务。请用程序解析此字符串,然后打印出“IP地址为***的服务器的***端口提供的服务为***”
练习6:原字符串123-456--789----123-2,求123-456-789-123-2
练习7:从文件路径中提取出文件名(包含后缀) 。比如从c:/a/xxx.avi中提取出xxx.avi这个文件名出来
练习8:求员工工资文件中,员工的最高工资、最低工资、平均工资 张三,20 李四,21
string ss = "123-456--789----123-2";
ss = ss.Replace("-", " ");
string[] slist = ss.Split(new char[]{' '}, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(string.Join("-",slist));
常用类库
StringBuilder高效的字符串操作
StringBuilder != String
StringBuilder sb = new StringBuilder();
sb.Append();
sb.ToString();
sb.Insert();
sb.Replace();
案例:使用程序拼html中的table
集合类
集合常用操作 添加、遍历、删除
命名空间System.Collections
ArrayList 可变长度数组,使用类似于数组
属性 Capacity Count
方法
Add() AddRange() Remove() RemoveAt() Clear() Contains() ToArray()
Hashtable 键值对的集合,类似于字典
案例:两个集合{ “a”,“b”,“c”,“d”,“e”}和{ “d”, “e”, “f”, “g”, “h” },把这两个集合去除重复项合并成一个
案例:随机生成10个1-100之间的数放到ArrayList中,要求这10个数不能重复,并且都是偶数
练习:有一个字符串是用空格分隔的一系列整数,写一个程序把其中的整数做如下重新排列打印出来:奇数显示在左侧、偶数显示在右侧。
比如‘2 7 8 3 22 9’显示成‘7 3 9 2 8 22’。
ArrayList al1 = new ArrayList() { "a","b","c","d","e"};
ArrayList al2 = new ArrayList() { "d", "e", "f", "g", "h" };
ArrayList al3 = new ArrayList(); al3.AddRange(al1);
foreach (string str in al2)
{
if (!al3.Contains(str))
{
al3.Add(str);
}
}
foreach (string str in al3)
{
Console.WriteLine(str);
} ============================
ArrayList al = new ArrayList();
Random r = new Random();
while (true)
{
int n = r.Next(, );
if (n % == )
{
al.Add(n);
}
if (al.Count == )
{
break;
}
} =======================================
string s = "5 8 9 10 11 22 4 3";
ArrayList al1 = new ArrayList();
ArrayList al2 = new ArrayList(); string[] arr = s.Split(' ');
foreach (string item in arr)
{
int n = int.Parse(item);
if (n % != )
{
al1.Add(n);
}
else
{
al2.Add(n);
}
}
(*)foreach
实现了IEnumerable(getEnumerator())、IEnumerable<T>的接口都可以使用foreach进行遍历。
我们可以自己写一个类使用foreach来遍历
案例:MyList 在这里可以发现foreach只允许读取数据,而不能修改数据 集合要支持foreach方式的遍历,必须实现IEnumerable接口(还要以某种方式返回实现了IEnumerator 的对象)
IEnumerator让foreach实现了查找下一项的能力
private int index;
private string[] names; public MyList(int num) {
index = -;
names = new string[num];
} #region IEnumerator 成员 //返回当前元素
public object Current
{
get {
return names[index];
}
}
//访问下一个元素,如果有返回true,否则返回false
public bool MoveNext()
{
index ++;
if(index >= names.Length){
return false;
}
else{
return true;
}
}
//将索引置于第一个索引之前
public void Reset()
{
index = -;
} #endregion #region IEnumerable 成员
//返回枚举器,当前类实现了IEnumerator,要对当前对象进行遍历所以返回this
public IEnumerator GetEnumerator()
{
return (IEnumerator)this;
} #endregion 从这两个接口的用词选择上,也可以看出其不同:IEnumerable是一个声明式的接口,声明实现该接口的class是“可枚举(enumerable)”的,但并没有说明如何实现枚举器(iterator);IEnumerator是一个实现式的接口,IEnumerator object就是一个iterator。 IEnumerable和IEnumerator通过IEnumerable的GetEnumerator()方法建立了连接,client可以通过IEnumerable的GetEnumerator()得到IEnumerator object,在这个意义上,将GetEnumerator()看作IEnumerator object的factory method也未尝不可。
泛型集合
书橱
命名空间System.Collections.Generic
List<T>类似于ArrayList
Dictionary<K,V>类似于Hashtable
T,K,V就像一把锁,锁住集合只能存某种特定的类型,这里的T,K,V也可以是其它字母
泛型集合可以进行foreach遍历,是因为实现了IEnumerable<T>
T/K/V是占位符,给数据类型占位 ,一旦替换为某种类型(可以是自己写的类),那么集合中只能存储这种类型的数据
这就是泛型集合
泛型集合
案例:把分拣奇偶数的程序用泛型实现。
练习:将int数组中的奇数放到一个新的int数组中返回 从一个整数的ArrayList、List<int>中取出最大数。别用max方法。
练习:汉英翻译
练习:编写一个函数进行日期转换,将输入的中文日期转换为阿拉伯数字日期,比如:二零一二年十二月月二十一日要转换为2012-12-21。
练习:计算字符串中每种字符出现的次数(面试题)。“Welcome to Chinaworld”,不区分大小写,打印“W2”“e 2”“o 3”……
string date = "二零一二年十二月二十一日";
string[] arr = ziDian.Split(' ');
foreach (string item in arr)
{
dic.Add(item.Substring(, ), item.Substring(, ));
}
Console.WriteLine(GetNum(date));
}
Dictionary<string, string> dic = new Dictionary<string, string>();
string ziDian = "零0 一1 二2 三3 四4 五5 六6 七7 八8 九9";
string GetNum(string date)
{
string newDate = "";
for (int i = ; i < date.Length; i++)
{
string num = date[i].ToString();
if (num != "十")
{
if (dic.ContainsKey(num))
{
newDate += dic[num];
}
else
{
newDate += num;
}
}
else
{
if (i > && i < date.Length)
{
string previousString = date.Substring(i - , );
string nextString = date.Substring(i + , );
if (dic.ContainsKey(previousString) && dic.ContainsKey(nextString))
{
}
else if (dic.ContainsKey(nextString))
{
newDate += "";
}
else if (dic.ContainsKey(previousString))
{
newDate += "";
}
else
{
newDate += "";
}
}
}
}
return newDate.Replace("年","-").Replace("月","-").Replace("日","");
}
string s = "Welcome to Chinaworld";
Dictionary<char, int> dict = new Dictionary<char, int>();//key为字符,value为出现的次数
foreach (char ch in s.ToLower())
{
if (dict.ContainsKey(ch))//如果dict中含有这个字符就在出现次数上增加1
{
//dict[ch]++;
dict[ch] = dict[ch] + ;
}
else
{
dict[ch] = ;//如果不存在就初始化为1
}
}
foreach (char ch in dict.Keys)
{
Console.WriteLine("{0}出现{1}次",ch,dict[ch]);
}
面向对象基础(class0425)字符串与集合的更多相关文章
- [.net 面向对象编程基础] (17) 数组与集合
[.net 面向对象编程基础] (17) 数组与集合 学习了前面的C#三大特性,及接口,抽象类这些相对抽象的东西以后,是不是有点很累的感觉.具体的东西总是容易理解,因此我们在介绍前面抽象概念的时候,总 ...
- 黑马基础阶段测试题:创建一个存储字符串的集合list,向list中添加以下字符串:”C++”、”Java”、” Python”、”大数据与云计算”。遍历集合,将长度小于5的字符串从集合中删除,删除成功后,打印集合中的所有元素
package com.swift; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; ...
- 【重走Android之路】【Java面向对象基础(一)】数据类型与运算符
[重走Android之路][基础篇(一)][Java面向对象基础]数据类型与运算符 1.数据类型介绍 在Java中,数据类型分为两种:基本数据类型和引用类型. 基本数据类型共8种,见下表: 基本数 ...
- JAVA(一)JAVA基础/面向对象基础/高级面向对象
成鹏致远 | lcw.cnblog.com |2014-01-23 JAVA基础 1.开发环境搭建 JAVA程序的执行流程 JAVA命令->要使用一个*.class文件(类文件)->通过c ...
- python之路 面向对象基础 XML
一.面向对象基础 1.类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义 ...
- 到头来还是逃不开Java - Java13面向对象基础
面向对象基础 没有特殊说明,我的所有学习笔记都是从廖老师那里摘抄过来的,侵删 引言 兜兜转转到了大四,学过了C,C++,C#,Java,Python,学一门丢一门,到了最后还是要把Java捡起来.所以 ...
- 了解JavaScript 面向对象基础 & 原型与对象
面向对象语言中的对象 老是能听到什么基于对象, 面向对象. 什么是对象, 如果有面向对象基础的人可以无视了, 下面举个简单的例子给大家讲讲面向对象中, 对象的定义, 这个是比较通用的, 不过对于JS来 ...
- MYSQL、PHP基础、面向对象基础简单复习总结
一.MYSQL 1.配置MySql 第一步安装服务器(apache). 第二部安装MySql界面程序 2 ...
- 从零开始学Python第六周:面向对象基础(需修改)
标签(空格分隔): 面向对象 一,面向对象基础 (1)面向对象概述 面向过程:根据业务逻辑从上到下写代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类 ...
随机推荐
- linux 批量重命名文件
模拟结果文件路径结构大概是:/当前目录/模型名/字模型名模拟/模拟温度/模拟结果文件. 模拟结果文件命名时相同的.模拟结果文件需要修改模拟结果文件的后缀名. 附shell脚本: find -type ...
- 1028: [JSOI2007]麻将 - BZOJ
Description 麻将是中国传统的娱乐工具之一.麻将牌的牌可以分为字牌(共有东.南.西.北.中.发.白七种)和序数牌(分为条子.饼子.万子三种花色,每种花色各有一到九的九种牌),每种牌各四张.在 ...
- ByteBuffer的allocate和allocateDirect区别
ByteBuffer的allocate和allocateDirect区别 在Java中当我们要对数据进行更底层的操作时,通常是操作数据的字节(byte)形式,这时常常会用到ByteBuffer这样一个 ...
- spring +hibernate 启动优化【转】
最近在负责一个大项目,项目组成员包括项目经理大概10个人左右.项目技术用struts+spring+hibernate实现.项目的规模相对来说是比较大的,总共有10大模块,每个大模块又分为有十几个.甚 ...
- scrum敏捷开发
团队PM:袁佩佩 scrum敏捷开发计划制定: 确定项目实施具体阶段目标 确定项目相关任务分解 确定每日站立会议进行计划 确定项目计划总结日程 确定风险解决方案
- iOS开发之loadView、viewDidLoad及viewDidUnload的关系
iOS开发之loadView.viewDidLoad及viewDidUnload的关系 iOS开发之loadView.viewDidLoad及viewDidUnload的关系 标题中所说的3个方 ...
- [itint5]最大子矩阵和
http://www.itint5.com/oj/#39 最大子矩阵和,复杂度O(n^3).利用了最大子段和的方法. int maxRectSum(vector<vector<int> ...
- Android四大基本组件
Android四大基本组件分别是 Activity:整个应用程序的门面,负责与用户进行交互. Service:承担大部分工作. Content Provider内容提供者:负责对外提供数据,并允许需要 ...
- xp主机用VMware9和10安装Ubuntu12.04后无法进入图像界面
xp主机用VMware9和10安装Ubuntu12.04后无法进入图像界面 备注:虚拟机安装Ubuntu12.04 64位版本 刚开始我用VMware-workstation-full-8.0.3来安 ...
- 【HDOJ】1667 The Rotation Game
1. 题目描述有个#字型的条带,可以从横线或竖线进行循环移动,求通过各种移动最终使中心的8个字符全等的长度最短并相同长度字典序最小的操作序列.2. 基本思路24个数据,8种移动方式,数据量很小了,所以 ...