[英]Trouble Converting string [] to int []
using System;
using System.IO;
namespace Test_Arrays_and_Files
{
class Program
{
static void Main(string[] args)
{
string tFile = @"C:\Programming\GLO\DC\dcw.txt";
string read = File.ReadAllText(tFile);
string[] test = read.Split(',');
int[] ints = Array.ConvertAll(test, int.Parse);
Console.WriteLine(ints[0]);
}
}
}
輸入數據:
文本文件內容:(每行 1 個值,)
35,
35,
40,
40,
40,
獲取 System.FormatException:輸入字符串的格式不正確,請幫助並為糟糕的帖子感到抱歉,我是新來的
您的代碼中有兩個問題,
,
它在拆分后創建空記錄。 這就是您收到錯誤的原因。$",{Environment.NewLine}"
不僅僅是','
。 因此,要將給定string
轉換為int
數組,首先Trim()
輸入字符串 by ,
然后按$",{Environment.NewLine}"
分割。
喜歡,
using System.Linq;
...
var result = str.Trim(',') //Remove leading and trailing comma(s), You can use `TrimEnd()` as well
.Split($",{Environment.NewLine}", StringSplitOptions.RemoveEmptyEntries) //Split by given delimiter.
.Select(int.Parse)
.ToArray(); //Convert string[] to int[]
你得到它只是因為文件末尾有一個逗號,這意味着拆分最終會在最后一個 position 中生成一個空字符串。 int.Parse 將阻塞空字符串
有很多方法可以解決它,一種是通過將代碼的拆分行更改為:告訴拆分不要返回空的內容:
string[] test = read.Split(new[]{','}, StringSplitOptions.RemoveEmptyEntries);
您可以改為修剪末尾的逗號,但使用上述方法意味着您的解析也將在文件中間的空白行中保留下來,因此總體而言它更健壯
通常在解析字符串時,使用 TryParse 比使用 Parse 更健壯。 TryParse 接受 number 變量以將結果設置為並返回 Boolean 告訴您解析是否成功
int[] ints = Array.ConvertAll(test, GetIntOrMinusOne);
//put a method helper
private int GetIntOrMinusOne(string s){
if(int.TryParse(s, out var t)
return t;
return -1;
}
為此,我們需要更多地參與 ConvertAll 調用。 我們不需要像 int.Parse 那樣指定“將字符串轉換為 int 的方法”,而是需要編寫自己的 mini 方法來嘗試解析,如果它失敗,則返回類似 -1 的內容,然后將其指定為調用的方法進行轉換,而不是 int.Parse
重要的是要注意,這會將 -1 引入到 int[] 數組中,只要字符串數組中有錯誤數據。在您以后的處理中,您將進行一些檢查以避免它們(例如跳過它們)
您可以將該代碼縮短一點
int[] ints = Array.ConvertAll(test, s => int.TryParse(s, out var t) ? t : -1);
但我不確定你是否會遇到過 lambda,從代碼的 rest 的風格來看
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.