【问题标题】:Cut a String (java) [duplicate]剪切字符串(java)[重复]
【发布时间】:2020-01-09 13:30:15
【问题描述】:

我想剪掉我的字符串"ftp://user:password@ftp.domain.com:21",以便将每篇文章都放在一个字符串中

换句话说,我想要:

String ftp = "ftp.domain.com"

String user = "user"

String password = "password"

String port = "21"

这段代码有效,但有点脏,对吧?

String fullFtpAdress = "ftp://user:password@ftp.domain.com:21";
fullFtpAdress = fullFtpAdress.substring(6);
String[] parts1 = fullFtpAdress.split(":",2);
String user = parts1[0];
String[] parts2 = parts1[1].split("@");
String password = parts2[0];
String[] parts3 = parts2[1].split(":");
String ftp = parts3[0];
String port = parts3[1];

您还有其他解决方案吗?

谢谢你:)

【问题讨论】:

  • 好吧,您可以使用正则表达式和捕获组(这可能是可选的)并获得这些。为此,请查看如何使用 PatternMatcher。 - 正则表达式本身可能看起来像这样(就在我的脑海中,所以它可能不理想并且可能包含错误 - 它应该让你开始):[^:]+://([^:]+):([^@])+@([^:]+):([^/]+) - 第 1 组是用户,第 2 组是密码,第 3 组是域,第 4 组是端口。
  • 听起来你想使用java.net.URI
  • 如果您是使用正则表达式的新手,您可以尝试使用此页面regexr.com 它有助于了解正则表达式的工作原理

标签: java string split ftp


【解决方案1】:

可能不是最干净的方式,但这只是一次拆分。

String fullFtpAddress = "ftp://user:password@ftp.domain.com:21";
String[] parts = fullFtpAddress.split("[:,@,/]");
String domain = parts[5];
String user = parts[3];
String password = parts[4];
String port = parts[6];

使用 Uri:

URI uri = URI.create(fullFtpAddress);
String domain = uri.getHost();
String userInfo = uri.getUserInfo();
String user = userInfo != null ? userInfo.split(":")[0] : null;    
String password = userInfo != null ? userInfo.split(":")[1]: null;
int port = uri.getPort();

【讨论】:

  • 这是域名字符串
  • 谢谢 Maxdola,我将使用 URI。这似乎是最好的:)
【解决方案2】:

使用URL 字段:

URL url = new URL("ftp://user:password@ftp.domain.com:21");
String userInfo = url.getUserInfo();
String protocol = url.getProtocol();
String host = url.getHost();
int port = url.getPort();
...

【讨论】:

  • 这只是他要求的一部分。
  • @Maxdola 当我输入答案时,较早的答案已被接受;提供的链接。添加了一些吸气剂,但不是全部处理; userInfo 可以为空,并且应该拆分为名称和密码。
  • 好的,我明白了,userInfo 可以为 null,但不会为 null,因为他提供了包含 userInfo 的 url。
  • @Maxdola 是的。 String user = userInfo == null ? null : userInfo.split(":")[0]; - 仍然是分裂。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-07
  • 1970-01-01
  • 2017-06-01
  • 1970-01-01
  • 2018-01-13
  • 2014-03-26
  • 1970-01-01
相关资源
最近更新 更多