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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-柯校 中级黑马   /  2014-3-24 14:29  /  1299 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马-柯校 于 2014-3-24 15:28 编辑

基础测试里面的一道题目:
页面上有一个文本框,文本框左侧和右侧各有一个按钮,点击左侧按钮文本框中的文字向左循环滚动一次,点击右侧按钮文本框中的文字向右循环滚动一次。
除了通过Substring()函数的方法,是否还有其他方法???

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 白夜行 于 2014-3-24 15:33 编辑

你可以先把文本框里的内容ToArray()成字符数组,然后写两个方法循环左移或右移就可以了,点击按钮触发事件就OK了,操作字符串的代码如下:

  1.   //向左移动一个字符
  2.         public static string MoveLeft(string str)
  3.         {
  4.             char[] strArray = str.ToArray();

  5.             char temp = strArray[0];  //保存第一个字符

  6.             for (int i = 1; i < strArray.Length; i++)
  7.             {
  8.                 strArray[i - 1] = strArray[i];

  9.                 if (i == strArray.Length - 1)
  10.                 {
  11.                     strArray[i] = temp;
  12.                 }
  13.             }
  14.             return new string(strArray);
  15.         }
复制代码

  1. //向右移动一个字符
  2.         public static string MoveRight(string str)
  3.         {
  4.             char[] strArray = str.ToArray();

  5.             char temp = strArray[strArray.Length - 1]; //保存最后一个字符

  6.             for (int i = strArray.Length - 1; i > 0; i--)
  7.             {
  8.                 strArray = strArray[i - 1];

  9.                 if (i == 1)
  10.                 {
  11.                     strArray[0] = temp;
  12.                 }
  13.             }

  14.             return new string(strArray);
  15.         }
复制代码


评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报 1 0
用正则表达式,一种奇葩的方法
  1.             string s = "abcdefg";
  2.             Regex regleft = new Regex(@"^(.)(.*.)$");// 向左
  3.             Regex regright = new Regex(@"^(..*)(.)$");// 向右
  4.             Match m;
  5.             // 向左移
  6.             for (int i = 0; i < s.Length; i++)
  7.             {
  8.                 m = regleft.Match(s);
  9.                 s = m.Groups[2].Value + m.Groups[1].Value;
  10.                 Console.WriteLine("左移:" + s);
  11.             }
  12.             s = "abcdefg";
  13.             // 向右移
  14.             for (int i = 0; i < s.Length; i++)
  15.             {
  16.                 m = regright.Match(s);
  17.                 s = m.Groups[2].Value + m.Groups[1].Value;
  18.                 Console.WriteLine("右移:" + s);
  19.             }
  20.             Console.ReadKey();
复制代码

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
学习!!!!
回复 使用道具 举报
额,我也试着做了下,用Winform的Timer组件,分享。。
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;

  10. namespace 点击按钮滚动
  11. {
  12.     public partial class Form1 : Form
  13.     {
  14.         public Form1()
  15.         {
  16.             InitializeComponent();
  17.         }
  18.         bool left;//控制做循环
  19.         bool right;//控制右循环
  20.         int count;//次数
  21.         private void btnLeft_Click(object sender, EventArgs e)//点击左移
  22.         {
  23.             left = true;
  24.             right = false;
  25.             count=0;//将count值清零
  26.             timer1.Enabled = true;//启用组件
  27.         }
  28.         private void btnRight_Click(object sender, EventArgs e)//点击右移
  29.         {
  30.             left = false;
  31.             right = true;
  32.             count = 0;
  33.             timer1.Enabled = true; //启用组件           
  34.         }
  35.         private void Form1_Load(object sender, EventArgs e)//加载窗体
  36.         {
  37.             textBox1.Text = "请输入你要滚动的文字";
  38.             timer1.Enabled = false;//将Timer组件禁用
  39.         }

  40.         private void timer1_Tick(object sender, EventArgs e)
  41.         {
  42.             string str = textBox1.Text;
  43.             if(left)
  44.             {
  45.                 textBox1.Text = str.Substring(1, str.Length - 1) + str[0];
  46.                 count++;
  47.             }
  48.             else if(right)
  49.             {
  50.                 textBox1.Text = str[str.Length - 1] + str.Substring(0, str.Length - 1);
  51.                 count++;
  52.             }
  53.             if (count >= textBox1.Text.Length)//当次数大于等于当前文本的长度时
  54.             {
  55.                 timer1.Enabled = false;//将Timer组件禁用
  56.             }
  57.         }

  58.     }
  59. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马