JAVA 参数传入时 转义字符的处理问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA 参数传入时 转义字符的处理问题相关的知识,希望对你有一定的参考价值。

方法一,把路径作为参数传入
public static void main(String args[])

File f1 = new File(args[0]) ; // 源文件的File对象

方法二,直接固定路径
public static void main(String args[])
File f1 = new File("D:\\test.txt") ; // 源文件的File对象

对于方法一,运行时,传入参数 “D:\\test.txt" 或者 “D:\test.txt"(不按转义方式输入)
程序都可以正常运行,为什么?

"|"在java中是特殊字符,如果不加“\\”就按特殊含义处理,加上转义字符“\\”就说明“|”是字符串而不是特殊字符。 参考技术A 只有在源代码的字符串里才需要转义~~参数什么的不需要~~本回答被提问者采纳 参考技术B 在程序里写路径 传入参数必须考虑转义前面加一个\ 但是如果从控制台输入上面两种都可以追问

为什么控制台输入时,可以不按转义的方式输入呢

追答

从控制台输入使用\\可能造成文件名的错误读入,最好用路径一个 \就好java挺聪明的因为用户输入的内容都是有字符组成的java知道\t是一个反斜杠后面跟一个t而不是换码符

Sangria-graphql:将 derivedInputObjectType 作为变异参数传入时出错

【中文标题】Sangria-graphql:将 derivedInputObjectType 作为变异参数传入时出错【英文标题】:Sangria-graphql: error when passing in derivedInputObjectType as an mutation argument 【发布时间】:2018-01-28 18:30:51 【问题描述】:

我有以下带有选项字段的案例类:

case class BusinessUserRow(id: String, firstName: Option[String], lastName: Option[String], email: Option[String])

我正在尝试为业务用户对象创建一个 inputType 对象

val BusinessUserInputType =
    deriveInputObjectType[BusinessUserRow](
      InputObjectTypeName("input"),
      InputObjectTypeDescription("A Business user")
    )

我想将此 BusinessInputObject 作为参数传递给 addBusinessUser 突变

  val businessUserInputArg = Argument("input", BusinessUserInputType)

val Mutation = ObjectType("Mutation", fields[RepoContext, Unit](
    Field("addBusinessUser", BusinessUserType,
      arguments = businessUserInputArg :: Nil,
      resolve = c ⇒ c.ctx.BusinessUserRepo.create(c.arg(businessUserInputArg)))))

但我得到以下编译错误:

Type dao.Tables.BusinessUserRow @@ sangria.marshalling.FromInput.InputObjectResult cannot be used as an input. Please consider defining an implicit instance of `FromInput` for it.
[error]   val businessUserInputArg = Argument("input", BusinessUserInputType)

但 BusinessRow 中的所有字段都是标量值。我不明白是什么导致了这个问题。有什么我没有看到吗?

【问题讨论】:

【参考方案1】:

谢谢!只需添加这一行就解决了我的问题:

implicit val businessUserFormat = Json.format[BusinessUserRow]

【讨论】:

【参考方案2】:

为了反序列化BusinessUserRow case 类中的输入,您需要提供FromInput[BusinessUserRow] 类型类的实例。你可以在这里找到更多关于它的文档:

http://sangria-graphql.org/learn/#frominput-type-class

因此,例如,如果您使用的是 spray-json,那么您需要为 BusinessUserRow 定义 JsonFormat

【讨论】:

以上是关于JAVA 参数传入时 转义字符的处理问题的主要内容,如果未能解决你的问题,请参考以下文章

java中字符串如何去掉转义字符

Vue中js获取url参数,特殊字符的转译、逆转译

命令行参数中的转义序列 (Java)

Spring特殊字符处理

java 字符串反斜杠怎么转义

c语言中不按转义字符处理是啥意思