我很流利,但我不確定我在這里做錯了什么。我正在嘗試從 Web 輸出中獲取資料,并通過“br /”和空格將其決議為陣列。提前感謝您的任何幫助。我string[] outputarray = ieoutput.Split(char.Parse("<br />"));在底部的行上收到錯誤“字串必須正好是一個字符長” 。再次感謝。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class UserData : MonoBehaviour
{
// URL of your webserver
string weburl = "127.0.0.1";
string uid = "?uid=" "219844";
string secret = "secret=" "428032";
string php;
string output;
string[] outputarray;
void Start()
{
Read();
}
void Generate(){
if (PlayerPrefs.HasKey("uid"))
{
uid = PlayerPrefs.GetString(uid);
secret = PlayerPrefs.GetString(secret);
}
else {
StartCoroutine(newUser("newuser", weburl, "genuser.php"));
}
}
void Read()
{
php = "read.php";
StartCoroutine(readUser("read", weburl, "read.php", uid, secret));
}
IEnumerator newUser(string usage, string serverurl, string phpfile) {
string ieusage = usage;
string url = serverurl;
string iephp = phpfile;
if (ieusage == "newuser"){
UnityWebRequest www = UnityWebRequest.Get(url "/userdata/" iephp);
yield return www.SendWebRequest();
output = www.downloadHandler.text;
Debug.Log(output);
if (www.result != UnityWebRequest.Result.Success) {
Debug.Log(www.error);
}
}
}
IEnumerator readUser(string usage, string serverurl, string phpfile, string userid, string usersecret) {
string ieusage = usage;
string url = serverurl;
string iephp = phpfile;
string ieuid = userid;
string iesecret = usersecret;
string ieoutput = "";
if (ieusage == "read"){
UnityWebRequest www = UnityWebRequest.Get(url "/userdata/" iephp ieuid "&" iesecret);
yield return www.SendWebRequest();
output = www.downloadHandler.text;
ieoutput = output;
Debug.Log(output);
if (www.result != UnityWebRequest.Result.Success) {
Debug.Log(www.error);
}
}
string[] outputarray = ieoutput.Split(char.Parse("<br />"));
for(int i = 0; i < outputarray.Length; i )
{
Debug.Log(outputarray[i]);
}
}
// Update is called once per frame
void Update()
{
}
}
uj5u.com熱心網友回復:
char.Parse("<br />")
會給你一個FormatException為char.Parse需要一個string具有完全相同的長度1為錯誤訊息告訴您。
你想簡單地使用 string.Split(string)
var outPutArray = ieoutput.Split("<br />");
或者對于多個分隔符選項,例如 string.Split(string[])
var outPutArray = ieoutput.Split(new []{"<br />", "<br>", "<br/>"});
因為最常見的是<br>標簽實際上是在沒有結束的情況下使用的/。
由于通常有多種方法可以準確地撰寫這些 HTML 標簽以匹配所有不同的撰寫方式,因此您也可以使用Regex.Split例如
var outPutArray = Regex.Split(ieoutput, "<[Bb][Rr].*?>", RegexOptions.SingleLine);
在這里你匹配任何東西
- 開頭
<br(或<BR,<Br等) - 以下一個結束
>
不管它們之間有什么,即使是換行符(見 RegexOptions.SingleLine
請參閱regex101.com 上的正則運算式示例和進一步說明
但是,正如已經建議的那樣,如果您實際上可以更改輸出格式,那么最簡單的解決方案就是使用換行符 ( \n)。它是單個字符,因此您可以簡單地使用
var outPutArray = ieoutput.Split('\n');
如果您的內容非常大,并且您不一定同時需要整個內容,outPutArray您甚至可以考慮使用StringReaderandStringReader.ReadLine來逐行處理行,而無需分配整個陣列并決議整個字串。
uj5u.com熱心網友回復:
嘗試在 Split 之前添加一個 if,如下所示:
if(ieoutput.Contains("<br />"))
{string[] outputarray = ieoutput.Split(char.Parse("<br />"));
for(int i = 0; i < outputarray.Length; i )
{
Debug.Log(outputarray[i]);
}
}
uj5u.com熱心網友回復:
如果你絕對必須按照你的方式去做。嘗試:
string[] outputarray = ieoutput.Split(new string[] {"<br/ >"}, System.StringSplitOptions.None)
否則,由于您似乎也控制 PHP 輸出,我建議讓 PHP 輸出一個 JSON 字串。然后使用Newtonsoft.Json將 JSON 字串轉換為 Object。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/377982.html
上一篇:具有未定義值的排序函式
下一篇:為什么我的陣列只列印第一個元素?
