C# 将逗号分隔的整数字符串转换为整数数组
我只找到了一种相反的方法:从int列表或数组中创建一个逗号分隔的字符串,而不是如何转换输入,比如C# 将逗号分隔的整数字符串转换为整数数组,c#,C#,我只找到了一种相反的方法:从int列表或数组中创建一个逗号分隔的字符串,而不是如何转换输入,比如string str=“1,2,3,4,5”到数组或整数列表 以下是我的实现(灵感来自于): 公共静态IEnumerable StringToIntList(字符串str) { if(String.IsNullOrEmpty(str)) { 屈服断裂; } var chunks=str.Split(',').AsEnumerable(); 使用(var=chunks.GetEnumerator())
string str=“1,2,3,4,5”代码>到数组或整数列表
以下是我的实现(灵感来自于):
公共静态IEnumerable StringToIntList(字符串str)
{
if(String.IsNullOrEmpty(str))
{
屈服断裂;
}
var chunks=str.Split(',').AsEnumerable();
使用(var=chunks.GetEnumerator())
{
while(rator.MoveNext())
{
int i=0;
if(Int32.TryParse(rator.Current,out i))
{
收益率i;
}
其他的
{
继续;
}
}
}
}
你认为这是一个好方法,还是有一种更简单,甚至是内置的方法
编辑:很抱歉出现任何混淆,但是该方法需要处理无效输入,如“1,2,3”
或“###,5”
等,跳过它。这是一个很长的过程,但您可以轻松地修改它以使用ints
private static long[] ConvertStringArrayToLongArray(string str)
{
return str.Split(",".ToCharArray()).Select(x => long.Parse(x.ToString())).ToArray();
}
您应该使用foreach循环,如下所示:
public static IEnumerable<int> StringToIntList(string str) {
if (String.IsNullOrEmpty(str))
yield break;
foreach(var s in str.Split(',')) {
int num;
if (int.TryParse(s, out num))
yield return num;
}
}
公共静态IEnumerable StringToIntList(字符串str){
if(String.IsNullOrEmpty(str))
屈服断裂;
foreach(str.Split(',')中的变量s){
int-num;
if(int.TryParse(s,out num))
收益数;
}
}
请注意,与您原来的帖子一样,这将忽略无法解析的数字
如果您想在无法解析数字时引发异常,则可以使用LINQ更简单地执行此操作:
return (str ?? "").Split(',').Select<string, int>(int.Parse);
return(str???).Split(',).Select(int.Parse);
我不明白为什么去掉枚举器会比使用foreach
有任何优势。也没有必要在块上调用aseneumerable
,,我认为这样就足够了。很明显,它是懒惰的,所以速度很快(可能第一次拆分字符串时除外)。如果您不想拥有当前的错误处理行为,那么它非常简单:
return text.Split(',').Select(x => int.Parse(x));
否则,我将使用一个额外的助手方法:
以及:
或以查询表达式形式:
return from t in text.Split(',')
select TryParseInt32(t) into x
where x.HasValue
select x.Value;
这是以前问过的。Net有一个内置的ConvertAll函数,用于将一种类型的数组转换为另一种类型的数组。您可以将其与拆分相结合,将字符串分隔为字符串数组
示例函数:
static int[] ToIntArray(this string value, char separator)
{
return Array.ConvertAll(value.Split(separator), s=>int.Parse(s));
}
--EDIT--看起来我把他的问题的标题看得太字面了--他要求的是一个int数组而不是一个列表--EDIT结束--
另一个辅助方法
private static int[] StringToIntArray(string myNumbers)
{
List<int> myIntegers = new List<int>();
Array.ForEach(myNumbers.Split(",".ToCharArray()), s =>
{
int currentInt;
if (Int32.TryParse(s, out currentInt))
myIntegers.Add(currentInt);
});
return myIntegers.ToArray();
}
在不使用lambda函数且仅用于有效输入的情况下,我认为这样做更清晰:
Array.ConvertAll<string, int>(value.Split(','), Convert.ToInt32);
Array.ConvertAll(value.Split(',),Convert.ToInt32);
我找到了一个简单的解决方案,对我很有效
String.Join(“,”,str.Split(“,”)代码>导入java.util.*;
导入java.io.*;
公共阶级问题
{
publicstaticvoidmain(字符串args[])在此处输入代码
{
弦线;
字符串[]线向量;
int n,m,i,j;
扫描仪sc=新的扫描仪(System.in);
line=sc.nextLine();
lineVector=直线分割(“,”);
//输入数组的大小
n=整数.parseInt(lineVector[0]);
m=整数.parseInt(lineVector[1]);
整数arr[][]=新整数[n][m];
//在这里输入数组
System.out.println(“输入数组:”);
对于(i=0;i让我们假设您将从console.Import System.Linq读取字符串,然后尝试以下操作:
int[] input = Console.ReadLine()
.Split(',', StringSplitOptions.RemoveEmptyEntries)
.Select(int.Parse)
.ToArray();
这将抛出不可解析的数字;他似乎想跳过这些数字。这与此不同。他的版本通过跳过这些数字来优雅地处理非整数。说得好,但我使用了他提供的输入示例:string str=“1,2,3,4,5”这根本不起作用;您忘记调用Split
。这将枚举字符串中的每个字符,并将引发,
。哦,您是对的。抱歉,我已经更正了。但这只适用于有效输入。您不使用foreach
,不必要地使代码复杂化。您从中复制的帖子是解决一个完全不同的问题。对于一个java/c的家伙来说,你的答案在我看来总是很实用:=)说到LINQ,这并不完全令人惊讶:)为什么不想使用方法组转换?有些人可能更喜欢lambda,它具有更好的类型推断。我喜欢提供选项:)@BimalDas:是的,因为否则结果将是IEnumerable
而不是IEnumerable
。我不同意,这是真的ly应该使用foreach
,这会让它更清晰。而且,它不必要的冗长。我说,足够好,不完美。它不会伤害我的眼睛,你只是顺其自然,去做另一件事……谢谢,很好!比我的方法简单多了。有一个{但是在foreach之后丢失了。非常好而且简单的解决方案。我发现我不需要这个部分
,这根本不能回答问题,而且看起来你会得到与开始时完全相同的字符串。
static int[] ToIntArray(this string value, char separator)
{
return Array.ConvertAll(value.Split(separator), s=>int.Parse(s));
}
private static int[] StringToIntArray(string myNumbers)
{
List<int> myIntegers = new List<int>();
Array.ForEach(myNumbers.Split(",".ToCharArray()), s =>
{
int currentInt;
if (Int32.TryParse(s, out currentInt))
myIntegers.Add(currentInt);
});
return myIntegers.ToArray();
}
static void Main(string[] args)
{
string myNumbers = "1,2,3,4,5";
int[] myArray = StringToIntArray(myNumbers);
Console.WriteLine(myArray.Sum().ToString()); // sum is 15.
myNumbers = "1,2,3,4,5,6,bad";
myArray = StringToIntArray(myNumbers);
Console.WriteLine(myArray.Sum().ToString()); // sum is 21
Console.ReadLine();
}
Array.ConvertAll<string, int>(value.Split(','), Convert.ToInt32);
import java.util.*;
import java.io.*;
public class problem
{
public static void main(String args[])enter code here
{
String line;
String[] lineVector;
int n,m,i,j;
Scanner sc = new Scanner(System.in);
line = sc.nextLine();
lineVector = line.split(",");
//enter the size of the array
n=Integer.parseInt(lineVector[0]);
m=Integer.parseInt(lineVector[1]);
int arr[][]= new int[n][m];
//enter the array here
System.out.println("Enter the array:");
for(i=0;i<n;i++)
{
line = sc.nextLine();
lineVector = line.split(",");
for(j=0;j<m;j++)
{
arr[i][j] = Integer.parseInt(lineVector[j]);
}
}
sc.close();
}
}
int[] input = Console.ReadLine()
.Split(',', StringSplitOptions.RemoveEmptyEntries)
.Select(int.Parse)
.ToArray();