我一直在嘗試決議和搜索大字串中的特定單詞,但似乎無法弄清楚。我創建了一個腳本,將 Twitch 頻道的聊天連接到一個整體。
訊息的一個例子是:
"@badge-info=subscriber/4;badges=moderator/1,subscriber/3,bits/1;bits=1;color=;display-name=TwitchUser1234;emotes=;flags=;id=da6ec4c6-af61-4346 -abc-123456789;mod=1;room-id=12345678;subscriber=1;tmi-sent-ts=160987654321;turbo=0;user-id=123456789;user-type=mod :TwitchUser1232.3twitchUser .tv PRIVMSG #thechannelyouarewatching :PogChamp1 另一個測驗位"
我嘗試通過執行以下操作來決議和搜索字串“位”訊息:
private void GameInputs(string ChatInputs)
{
string Search;
Search = ChatInputs.Split(";", "=");
if(string "bits" in Search)
{
print("I made it here.");
}
}
我完全不知所措,不知道該怎么做。任何幫助表示贊賞。
如果需要我的完整代碼,它是:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.ComponentModel;
using System.Net.Sockets;
using System.IO;
public class TwitchChat : MonoBehaviour
{
private TcpClient twitchClient;
private StreamReader reader;
private StreamWriter writer;
public string username, password, channelName; // http://twitchapps.com/tmi
// Start is called before the first frame update
void Start()
{
Connect();
}
void Update()
{
if(!twitchClient.Connected)
{
Connect();
}
ReadChat();
}
private void Connect()
{
twitchClient = new TcpClient("irc.chat.twitch.tv", 6667);
reader = new StreamReader(twitchClient.GetStream());
writer = new StreamWriter(twitchClient.GetStream());
writer.WriteLine("PASS " password);
writer.WriteLine("NICK " username);
writer.WriteLine("USER " username " 8 * :" username);
writer.WriteLine("JOIN #" channelName);
writer.WriteLine("CAP REQ :twitch.tv/tags");
writer.Flush();
}
private void ReadChat()
{
if (twitchClient.Available > 0)
{
var message = reader.ReadLine();
print(message);
GameInputs(message);
}
}
private void GameInputs(string ChatInputs)
{
string Search;
Search = ChatInputs.Split(";", "=");
if(string "bits" in Search)
{
print("I made it here.");
}
}
}
uj5u.com熱心網友回復:
如果你想拉出“bits=xx”的值,可以這樣做:
var b = value.Split(';').FirstOrDefault(s => s.StartsWith("bits="))?[5..];
b 如果“bits=”不存在,則為空
如果您要從該字串中決議出很多值,請考慮將其轉換為字典:
var c = new []{'='};
var d = value.Split(';').ToDictionary(s => s.Split(c,2)[0], s => s.Split(c,2)[1]);
拆分兩次有點低效,如果打擾你,你可以子串:
value.Split(';').ToDictionary(s => s[..s.IndexOf('=')], s => s[s.IndexOf('=') 1..]);
這給出了一個字串字典,所以你可以這樣做:
if(d.ContainsKey("bits")){
var bits = int.Parse(d["bits"]);
...
uj5u.com熱心網友回復:
String 有一個方法 Contains(string) 可以完成這項作業:
if (ChantInputs.Contains("bits")
{
print("I made it here.");
}
uj5u.com熱心網友回復:
你可以試試下面。
private void GameInputs(string ChatInputs)
{
string[] Search = ChatInputs.Split(new char[] { ';', '=' });
foreach(string s in Search)
{
if(s == "bits")
{
print("I made it here.");
}
}
}
下面是作業代碼。
using System;
namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
string str = "one;two;test;three;test test";
string[] strs = str.Split(new char[] { ';', ' ' });
foreach(string s in strs)
{
if(s == "test")
{
Console.WriteLine(s);
}
}
Console.ReadLine();
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/332865.html
