-1

我正在学习一本书中的教程,并且有一小段我不明白的代码。代码如下:

// conv_ex.cs - Exercise 12.4
// This listing will cut the front of the string
// off when it finds a space, comma, or period.
// Letters and other characters will still cause
// bad data.
//-----------------------------------------------
using System;
using System.Text;

class myApp
{
    public static void Main()
    {
        string buff;
        int age;
        // The following sets up an array of characters used 
        // to find a break for the Split method. 
        char[] delim = new char[] { ' ', ',', '.' };
        // The following is an array of strings that will
        // be used to hold the split strings returned from
        // the split method.
        string[] nbuff = new string[4];

        Console.Write("Enter your age: ");

        buff = Console.ReadLine();

        // break string up if it is in multiple pieces.
        // Exception handling not added

        nbuff = buff.Split(delim,2); //<----- what is purpose of (delim,2) in this case?
        //nbuff = buff.Split(delim); // will give the same result
        //nbuff = buff.Split(delim,3); //will give the same result


        // Now convert....

        try
        {
            age = Convert.ToInt32(nbuff[0]);
            Console.WriteLine("age is:" + age);

            if (age < 21)
                Console.WriteLine("You are under 21.");
            else
                Console.Write("You are 21 or older.");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine("No value was entered... (equal to null)");
        }
        catch (OverflowException e)
        {
            Console.WriteLine("You entered a number that is too big or too small.");
        }
        catch (FormatException e)
        {
            Console.WriteLine("You didn't enter a valid number.");
        }
        catch (Exception e)
        {
            Console.WriteLine("Something went wrong with the conversion.");
            throw (e);
        }
    }
}

我的问题是:

“ 2 ”的目的是什么nbuff = buff.Split(delim,2);

无论如何,字符串都会分成两半,对吗?

即使没有“ 2 ”,例如nbuff = buff.Split(delim);结果也是一样的。

4

4 回答 4

3

它指定要返回的最大子字符串数。

拆分(字符 [],Int32)

Returns a string array that contains the substrings in this instance that are delimited by elements of a specified Unicode character array. A parameter specifies the maximum number of substrings to return.

这里String.Split()列出的方法有几个重载

于 2013-03-08T17:06:13.123 回答
2

这是要返回的最大子字符串数。将其更改为3无效的原因是要返回的子字符串少于 3 个,因此,按照设计,它无论如何都会返回所有可用的子字符串。例如,如果5可能返回的子字符串,那么只会3返回第一个。

您可以在此处阅读有关该String.Split()方法的更多信息。

于 2013-03-08T17:04:34.687 回答
2

2 表示要返回的最大字符串数。

有关完整信息,请参见此处

该参数称为count。以下是相关文字:

如果本实例中 有多个count子串,则在返回值的第一个count -1个元素中返回第一个count -1个子串,在返回值的最后一个元素中返回本实例中剩余的字符。

于 2013-03-08T17:05:48.737 回答
1

2in指定要返回的buff.Split(delim,2)最大子字符串数。例如,如果字符串有 4 个部分,由 中定义的字符分隔delim,那么您会注意到不同之处。如果使用Split(delim,2),则只会返回 2 个子字符串。

您也可以在 MSDN 上阅读此页面

于 2013-03-08T17:05:06.987 回答