我在Java中有2个子字符串语句需要转换为C#。第一个似乎是工作,但第二个不是那么多,我不知道为什么。
密钥是一串长度为7-18个字符的可变长度
首先在Java中,然后在C#中。 X可以是1-12个字符。
String X = key.substring(0,key.length()-6);
System.out.println("\nX: " + X.toUpperCase());
Console.WriteLine ("\nDLN: " + (key.Substring (0, key.Length - 6).ToUpper ()));
第二个,其中Y是X
之后的前2个字符String Y = key.substring(key.length()-6, key.length()-4);
System.out.println("\nY : " + Y.toUpperCase());
//NOT WORKING
Console.WriteLine("\nY: " + (key.Substring(key.Length -6, key.Length -4)).ToUpper ());
答案 0 :(得分:2)
如果您查看Java vs C#的文档,您会发现C#
' s Substring
采用起始索引和长度,而Java采用起始索引和结束索引。
substring(int beginIndex, int endIndex)
C#
Substring(Int32, Int32) Retrieves a substring from this instance. The substring starts at a specified character position and has a specified length.
你好像假设他们采取相同的论点。
答案 1 :(得分:1)
Substring
的第二个参数不是您想要的最后一个字符的索引,它是您想要的数字。
因此,如果您想要X
之后的前两个字符,请使用计数2。
key.Substring(key.Length -6, length: 2)
答案 2 :(得分:-1)
在C#中,String.Substring()方法的第二个参数不是endIndex,因为它在Java中,而是返回的子字符串的长度。因此,您应该使用它:
key.Substring(key.Length - 6, 2)
请注意key.Length - 6 >= 2
,否则会引发ArgumentOutOfRangeException
。