A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张俊双 中级黑马   /  2012-10-16 09:13  /  2999 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

比如“众所周知,钓鱼岛自古就是中国的,小日本的购钓鱼岛闹剧只能让世人耻笑,钓鱼岛过去、现在、将来都是中国的,谁也无法改变”。请问如何循环输出“钓鱼岛”的位置,求解?谢谢啦

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

15 个回复

倒序浏览
namespace Test6
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "“众所周知,钓鱼岛自古就是中国的,小日本的购钓鱼岛闹剧只能让世人耻笑,钓鱼岛过去、现在、将来都是中国的,谁也无法改变";
         
            for (int i = 0; i < str.Length; i++)
            {
                if (str[i] == '钓')
                {
                   Console.WriteLine("钓鱼岛的位置是:{0}", i);
                }
            }

        }
    }
}
经实验可以输出钓鱼岛的位置,也可以用Indexof方法获取字符所在的位置,如果理解错啦,我再帮你弄一下。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
Console.WriteLine("钓鱼岛的位置是:{0}", i);
钓字位置应该是i+1吧,如果是钓鱼岛就是i+1,i+2,i+3...楼主是不是这个意思?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
谢谢,我想用indexof方法实现,还请不吝赐教!
回复 使用道具 举报
张俊双 发表于 2012-10-16 11:39
谢谢,我想用indexof方法实现,还请不吝赐教!

Indexof只能判断字符首次出现的位置,不能循环输出位置,我自己弄了好久,问了一下别人还是没有搞定,水平有限,多多抱憾!
回复 使用道具 举报
Console.WriteLine("钓鱼岛的位置是:{0}", i);
这句是什么意思?可以解释下吗?我是高中生自学的

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
中山郎 发表于 2012-10-16 11:54
Indexof只能判断字符首次出现的位置,不能循环输出位置,我自己弄了好久,问了一下别人还是没有搞定,水 ...

仍然感谢,我再试试
回复 使用道具 举报
刘鹏辉 发表于 2012-10-16 12:00
Console.WriteLine("钓鱼岛的位置是:{0}", i);
这句是什么意思?可以解释下吗?我是高中生自学的 ...

其意思就是输出要显示的内容;“{0}”是i占位符,i是什么,“{0}”就显示什么,这里i显示的是数字,比如是6,完整的显示是:钓鱼岛的位置是6。

点评

谢谢  发表于 2012-10-30 11:25
回复 使用道具 举报
  1. string str = "众所周知,钓鱼岛自古就是中国的,小日本的购钓鱼岛闹剧只能让世人耻笑,钓鱼岛过去、现在、将来都是中国的,谁也无法改变";
  2.             for (int i = 0; i < str.Length; )
  3.             {
  4.                 if (str.IndexOf("钓鱼岛", i) != -1)//如果找到了"钓鱼岛"
  5.                 {
  6.                     Console.WriteLine(str.IndexOf("钓鱼岛", i));//输出"钓鱼岛"的位置
  7.                     i = str.IndexOf("钓鱼岛", i) + 3;//对i重新赋值,让其从岛后面的位置找起                    
  8.                 }              
  9.             }
  10.             Console.ReadKey();
复制代码
输出结果:
5
21
34

不知道楼主要的是不是这样的,用了这个重载IndexOf(String, Int32) :报告指定字符串在此实例中的第一个匹配项的索引。该搜索从指定字符位置开始。
回复 使用道具 举报
  1.       else
  2.                 {
  3.                     break;
  4.                 }
复制代码
把这个加到for循环里,可以在查不到的时候停止,刚忘了加了

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
和志强 发表于 2012-10-16 20:22
输出结果:
5
21

受教啦,发现如果里面如果不使用i判断位置的话,即使逻辑正确也会死循环。
回复 使用道具 举报
中山郎 发表于 2012-10-16 20:45
受教啦,发现如果里面如果不使用i判断位置的话,即使逻辑正确也会死循环。 ...

namespace Test6
{
   
    class Program
    {
        static void Main(string[] args)
        {
            string str = "众所周知,钓鱼岛自古就是中国的,小日本的购钓鱼岛闹剧只能让世人耻笑,钓鱼岛过去、现在、将来都是中国的,谁也无法改变";

            for (int i = 0; i < str.Length; i++)
            {
                if (str.IndexOf("钓鱼岛",i) != -1)
                {
                    int a = str.IndexOf("钓鱼岛",i);
                    Console.WriteLine("钓鱼岛出现的位置:{0}",a);
                    i = a+3;
                }
              
            }

           
        }
    }
}
没问题啊,我运行的没有错误。
回复 使用道具 举报
中山郎 发表于 2012-10-16 20:48
namespace Test6
{
   

谢谢,你辛苦了,受益匪浅啊!
回复 使用道具 举报
和志强 发表于 2012-10-16 20:22
输出结果:
5
21

谢谢,都太有才了!
回复 使用道具 举报
中山郎 发表于 2012-10-16 09:48
namespace Test6
{
    class Program

你这个方法要是文字中出现一个 钓鱼。也会当做钓鱼岛。这样就错了。所以应该要判断“钓鱼岛”
回复 使用道具 举报
张俊双 发表于 2012-10-16 12:16
其意思就是输出要显示的内容;“{0}”是i占位符,i是什么,“{0}”就显示什么,这里i显示的是数字,比如 ...

这个和Console.WriteLine("钓鱼岛的位置是:" +  i); 区别在哪?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马